我一直在想,这两个属性的工作原理究竟是什么。我知道第二个是通用的,基本上不涉及时区,但谁能详细解释一下它们是如何工作的,以及在什么情况下应该使用哪个?
当前回答
DateTime不知道时区是什么。它总是假设你在当地时间。UtcNow只意味着“从时间中减去我的时区”。
如果您想使用支持时区的日期,请使用DateTimeOffset,它表示带有时区的日期/时间。这是我吃了不少苦头才明白的。
其他回答
DateTime不知道时区是什么。它总是假设你在当地时间。UtcNow只意味着“从时间中减去我的时区”。
如果您想使用支持时区的日期,请使用DateTimeOffset,它表示带有时区的日期/时间。这是我吃了不少苦头才明白的。
最大的区别:)是DateTime。现在SharePoint工作流不支持,您必须使用DateTime。UtcNow
在。net中需要理解的一个主要概念是,现在是全世界的现在,无论你在哪个时区。如果你用DateTime加载一个变量。现在或日期时间。UtcNow——任务是一样的。您的DateTime对象知道您所在的时区,并将其考虑进来,而不考虑分配。
DateTime的有用性。在计算跨越夏令时边界的日期时,UtcNow非常方便。即在参加夏令时的地方,有时从中午到第二天中午有25个小时,有时从中午到第二天中午有23个小时。如果您希望正确地确定时间A和时间B的小时数,那么在计算TimeSpan之前,您需要首先将它们转换为它们的UTC等效值。
我写了一篇博客文章,进一步解释了TimeSpan,并包含了一个链接到关于该主题的更广泛的MS文章。
*澄清:任何赋值都将存储当前时间。如果你要加载两个变量,一个是通过DateTime.Now(),另一个是通过DateTime.UtcNow(),两者之间的时间差将是毫秒,而不是小时,假设你在一个时区小时与GMT。如下所述,打印出它们的String值将显示不同的字符串。
还要注意性能差异;DateTime。UtcNow大约比DateTime快30倍。现在,因为内部DateTime。现在正在做很多时区调整(你可以很容易地验证这与反射器)。
所以不要使用DateTime。现在是相对时间测量。
当您需要应用程序运行的机器的本地时间(例如欧洲的CEST时间)时,请使用Now。如果你想要一个通用时间- UtcNow。这只是你的喜好的问题-可能做一个本地网站/独立的应用程序,你想使用的时间用户有-所以受他/她的时区设置- DateTime.Now。
记住,对于一个网站来说,它是服务器的时区设置。因此,如果您正在为用户显示时间,要么获取他的首选时区并移动时间(只需将Utc时间保存到数据库并修改它),要么指定它为Utc。如果你忘记这样做,用户可以看到类似这样的东西:张贴3减前,然后在未来的时间附近:)
推荐文章
- 如何为构造函数定制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中获取当前日期?