对于实施例Cache.Add使用DateTime.Now.Add来计算到期,即,其通过:
DateTime.Now.AddSeconds(60)
Run Code Online (Sandbox Code Playgroud)
作为absoluteExpiration参数的值.
我认为相对计算它DateTime.UtcNow会更正确[因为如果夏令时在现在和到期点之间的间隔开始时没有歧义].
在介绍之前DateTimeKind,我已经猜到缓存管理中有一些丑陋的黑客攻击,如果时间不是UTC时间,它可以做一些合适的事情.
在.NET 2.0及更高版本中,我猜测它应该正确处理DateTime计算,DateTime.UtcNow.AddSeconds(60)因为它必须DateTime.Kind在推理中用作输入.
多年来我一直在自信地使用它DateTime.UtcNow作为基础,但是没有能够提出这样的理由:如果没有任何指出文档在4年多的时间里一直存在误导性,这绝对是正确的做法.
问题?
(是的,我可以仔细阅读源和/或反射器的来源,但我正在寻找一个完整的逐个打击的低点!)
如果我尝试:
DateTime.Now.Subtract(DateTime.UtcNow)
Run Code Online (Sandbox Code Playgroud)
我希望结果非常接近于零.但它不是,相反,它是时区差异,在我的情况下,-4小时.有一个.Kind - DateTime知道时区是不同的.为什么不为我追踪这个?是否有正确使用Kind的Subtract的味道?
(作为参考,可以在以下网址看到每个输出的详细信息:https://stackoverflow.com/a/3229429/237091)