如何在 Windows Phone 7 上获取以毫秒为单位的时间

本文关键字:为单位 时间 获取 Windows Phone | 更新日期: 2023-09-27 18:32:22

我想以自 1970 年以来的当前时间(以毫秒为单位)命名我的文件。

目前,我只有一个计数器,并在每个新文件后将其递增。但是当应用程序重新启动时,计数器会恢复为零,当我再次开始保存文件时,我会覆盖这些文件。

所以我在想如果我只是以秒或毫秒为单位使用时间,那么我就不会有这个问题。

所以我的问题是如何在 Windows Mobile 上以毫秒为单位获取时间。

这就是我目前正在做的生成我的文件名。

string fileName = savedCounter + ".jpg";

如何在 Windows Phone 7 上获取以毫秒为单位的时间

您可以使用 Ticks

单个刻度表示一百纳秒或千万分之一 一秒钟。一毫秒内有 10,000 个刻度。

DateTime unixEpoch = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long totalMiliSecond = (currentDate.Ticks - unixEpoch.Ticks) /10000;
Console.WriteLine(totalMiliSecond);
string fileName = string.Concat(totalMiliSecond,".jpg");
Console.WriteLine(fileName);

你只是用毫秒来生成一个唯一的文件名吗?如果是这样,使用 Guid.NewGuid() 可能会更好。ToString()

DateTime.UtcNow为您提供当前的UTC时间

new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)给你1970

因此,您可以使用:

var savedCounter = Math.Round((DateTime.UtcNow - new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)).TotalSeconds);

一些替代命名策略包括:

  • 鉴于您的应用程序在 1970 年没有多少副本,您可能可以使用基线日期,例如 new DateTime(2012,1,1,0,0,0)
  • 您还可以使用 DateTime.ToString 格式(如 yyyyMMddhhmmss)来实现基于日期的字符串 - 这对于人类来说可能更容易阅读(例如,使用调试器或独立存储资源管理器)

除了 - 出于性能原因,请注意您不应该在一个目录中创建太多文件 - http://appangles.com/blogs/mickn/wp7/how-many-files-are-too-many-files-for-windows-phone-7-isolated-storage-performance/- 在某些时候使用单个文件(例如数据库)是有意义的

使用时间,甚至更好的当前架构,将当前计数器保存到隔离存储设置中。它易于使用:http://msdn.microsoft.com/en-us/library/cc221360(v=vs.95).aspx

即使使用时间戳生成文件名,如果应用程序的多个实例可以同时运行,则仍有可能发生冲突。 无论是否使用时间戳,都可能需要执行以下操作:

  1. 将计数器初始化为 0
  2. 为文件生成一个名称,并将计数器合并到其名称中。
  3. 尝试创建文件,打开它以获得独占 R/W 访问权限,并要求该文件尚不存在。
  4. 如果文件创建由于某种原因失败,请递增计数器并重复步骤 2-4。

事实上,这很可能是像System.IO.Path.GetTempFileName()这样的例行公事所做的事情。

最好使用 Guid 而不是 DateTime。

string fileName = System.Guid.NewGuid() + ".jpg";