C#转换到Unix和从Unix转换时间-损失1天
代码如下:C#转换到Unix和从Unix转换时间-损失1天,c#,.net-core,C#,.net Core,代码如下: var date = DateTime.Now.Date; var ms = (long)(date - DateTimeOffset.UnixEpoch).TotalMilliseconds; var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).DateTime.Date; 日期是24日,日期1是23日 为什么它们不匹配?使用DateTimeOffset.fromUnixtimemilures(ms).LocalDate
var date = DateTime.Now.Date;
var ms = (long)(date - DateTimeOffset.UnixEpoch).TotalMilliseconds;
var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).DateTime.Date;
日期是24日,日期1是23日
为什么它们不匹配?使用
DateTimeOffset.fromUnixtimemilures(ms).LocalDateTime
DateTime。现在
具有Kind=Local
,因此它正在减小UTC偏移量
您可以通过以下方式查看:
var kind = DateTime.Now.Date.Kind;
然后你可以用“种类”做一个小测试:
ms
是多少?根据冬季/夏季时间和您所在的位置,它可能不是0
因此,您的ms
包括UTC偏移量。现在你必须:
var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).LocalDateTime;
希望您仍然处于“原始”utc偏移量(因此在计算date
和计算date1
之间没有足够的天数供您在冬季/夏季之间切换)
(如果你做的一切都正确,你就不需要在
.LocalDateTime
之后加上.Date
,因为日期应该已经是00:00:00
)可能是时区<代码>日期。现在在您的本地
时区<代码>日期时间偏移量。UnixEpoch以UTC为单位。执行date-DateTimeOffset.UnixEpoch
将执行时区转换,以便ms
给出从unix历元(UTC)到本地时区中“现在”的秒数。到目前为止一切都很好<代码>日期时间偏移量。FromUnixtimeMissions(ms)提供UTC中的DateTimeOffset
,因此date1
将使用UTC,而不是本地时区。从这一点上,我们推断您必须领先UTC?是的,谢谢您的解释您所说的-它起作用了。但我不明白为什么。我离UTC..@BoppityBop只有2个小时,这两个小时将前一天的00:00时间推到22:00时间。C#中没有“纯日期”类型。使用.Date
只需将时间设置为00:00。@BoppityBop准确无误。别忘了你正在做的DateTime.Now.Date
——这.Date
很重要,因为它给了你一个DateTime
,表示问题中一天的午夜是一个咆哮,DateTime中的类信息是他们在.NET 1.0中提出的最糟糕的想法之一,遗憾的是我们不得不保留它。我只见过它破坏东西,我从来没有见过它是有用的东西。在可能的情况下使用<代码> DATEMEMPLOS/<代码>(只有很少的情况下使用它是没有意义的),并且考虑代码“> DeTeMePosiff不切断它的情况下,像NodoTime之类的东西。
var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).LocalDateTime;