我一直在想,这两个属性的工作原理究竟是什么。我知道第二个是通用的,基本上不涉及时区,但谁能详细解释一下它们是如何工作的,以及在什么情况下应该使用哪个?
当前回答
还要注意性能差异;DateTime。UtcNow大约比DateTime快30倍。现在,因为内部DateTime。现在正在做很多时区调整(你可以很容易地验证这与反射器)。
所以不要使用DateTime。现在是相对时间测量。
其他回答
这个问题的“简单”答案是:
DateTime。现在返回一个DateTime值,表示当前系统时间(无论系统运行在哪个时区)。DateTime。Kind属性将为DateTimeKind。当地的
DateTime。UtcNow返回一个DateTime值,表示当前的通用协调时间(即UTC),无论系统的时区如何,该值都是相同的。DateTime。Kind属性将为DateTimeKind。Utc
最大的区别:)是DateTime。现在SharePoint工作流不支持,您必须使用DateTime。UtcNow
有点晚了,但我发现这两个链接(4guysfromrolla)非常有用:
使用协调世界时(UTC)存储日期/时间值
跨不同时区存储和显示日期和时间的建议
DateTime。UtcNow告诉你的日期和时间是协调世界时,也被称为格林威治标准时间时区——基本上就像如果你在英国伦敦,但不是在夏天。DateTime。现在给出在当前区域显示的日期和时间。
我推荐使用DateTime。现在,无论何时你向人们展示一个日期——这样他们就会对他们所看到的值感到满意——他们可以很容易地将其与他们在手表或时钟上看到的值进行比较。使用DateTime。UtcNow当您想要存储日期或在以后的计算中使用它们时(在客户机-服务器模型中),您的计算不会被位于不同时区的客户机与服务器或彼此之间的客户机所混淆。
DateTime。UtcNow是一个连续的单值时间刻度,而DateTime。Now不是连续的或单值的。主要原因是日光节约时间,它不适用于协调世界时。因此UTC不会向前或向后跳一个小时,而本地时间(DateTime.Now)则会。当它向后跳转时,相同的时间值出现两次。
推荐文章
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 为什么Visual Studio 2015/2017/2019测试运行器没有发现我的xUnit v2测试
- AppSettings从.config文件中获取值
- 如何检查IEnumerable是否为空或空?
- 解析日期字符串并更改格式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- Java SimpleDateFormat("yyyy-MM-dd' t ' hh:mm:ss' z '")给出的时区为IST
- 如何在iis7应用程序池中设置。net Framework 4.5版本
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 在Java中转换字符串到日历对象
- 如何指定最小值,但没有使用范围数据注释属性的最大小数?
- 如何在PowerShell中获得本地主机名?
- 为什么在Java和。net中不能修改字符串?
- 如何在Android中获取当前日期?