我正在创建网络文件系统的内存本地缓存。
我希望每个目录/文件都具有LastDownloadedTime
属性,然后将其与当前时间进行比较,以确定目录/文件是否太旧而无法从缓存中使用。
但我不确定DateTime.Now()
是否是我需要的。如果用户更改系统时间会发生什么?如何在.NET中获取适合我的任务的simestamp?
答案 0 :(得分:1)
看看System.DateTime.UTCNow()
。它将返回UTC时间。只要确保你一直在调用两端(当你存储缓存时以及测试它到期时)。
更多信息:https://msdn.microsoft.com/en-us/library/system.datetime.utcnow(v=vs.110).aspx
答案 1 :(得分:0)
您应该使用DateTimeOffset
。根据{{3}}:
独特且明确地识别单个时间点。 DateTimeOffset类型可用于明确定义" now"的含义,记录事务时间,记录系统或应用程序事件的时间,以及记录文件创建和修改时间。
如果您的应用程序在用户的计算机上运行,他们可以更改系统时间(如您所述)。防止这种情况的唯一方法是让您的应用程序ping一个时间服务器以获得权威的时间戳。
答案 2 :(得分:0)
我想我将Stopwatch
用于时间戳,因为我的文件系统缓存是内存中的,它不会在系统重启后继续存在。时间戳将相对于Stopwatch
的开头。
虽然Stopwatch
已知为buggy。
但我认为系统时钟相关的解决方案更加危险,因为用户可能会将系统时钟设置为过去某个日期,从而搞乱一切。
答案 3 :(得分:0)
如果您处于本地服务器的范围内,则DateTime.UtcNow是该任务最方便的选项。是的,如果用户更改本地时间,那么将使缓存无效并触发不必要的更新。
您需要使用NTP(时间)服务器来避免此问题。因此,您将从NTP服务器获取UTC时间,而不是使用本地服务器UTC时间(世界各地都有很多可用的时间)。