如何在 Windows Phone 7 上获取以毫秒为单位的时间
本文关键字:为单位 时间 获取 Windows Phone | 更新日期: 2023-09-27 18:32:22
我想以自 1970 年以来的当前时间(以毫秒为单位)命名我的文件。
目前,我只有一个计数器,并在每个新文件后将其递增。但是当应用程序重新启动时,计数器会恢复为零,当我再次开始保存文件时,我会覆盖这些文件。
所以我在想如果我只是以秒或毫秒为单位使用时间,那么我就不会有这个问题。
所以我的问题是如何在 Windows Mobile 上以毫秒为单位获取时间。
这就是我目前正在做的生成我的文件名。
string fileName = savedCounter + ".jpg";
您可以使用 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
即使使用时间戳生成文件名,如果应用程序的多个实例可以同时运行,则仍有可能发生冲突。 无论是否使用时间戳,都可能需要执行以下操作:
- 将计数器初始化为 0
- 为文件生成一个名称,并将计数器合并到其名称中。
- 尝试创建文件,打开它以获得独占 R/W 访问权限,并要求该文件尚不存在。
- 如果文件创建由于某种原因失败,请递增计数器并重复步骤 2-4。
事实上,这很可能是像System.IO.Path.GetTempFileName()
这样的例行公事所做的事情。
最好使用 Guid 而不是 DateTime。
string fileName = System.Guid.NewGuid() + ".jpg";