如何比较不同时区的日期时间

时间:2016-07-18 18:11:12

标签: c# datetime timezone

任何比较来自不同时区的2个日期时间的方法。我有1个DateTime来自服务器它的UTC + 3:00和本地机器上的DateTime是UTC + 6:00。如何比较那2个DateTimes所以当DateTime 1(服务器)将是> = DateTime 2(客户端)所以我可以做点什么。

P.S 是的,我知道如何比较DateTimes,但是当他们处于不同的时区时,我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:2)

假设您有两个DateTime对象,它们代表相同的Instant,但在不同的时区。

DateTime dt1 = DateTime.Now.AddHours(3);
DateTime dt2 = dt1.AddHours(3);

// change kind to unspecified
dt1 = new DateTime(dt1.Ticks, DateTimeKind.Unspecified);
dt2 = new DateTime(dt2.Ticks, DateTimeKind.Unspecified);

// append the offset for each time
var offset1 = new DateTimeOffset(dt1, TimeSpan.FromHours(3));
var offset2 = new DateTimeOffset(dt2, TimeSpan.FromHours(6));

// compare
bool areEqual = offset1.Equals(offset2); // true

虽然上述方法有效,但我强烈建议您查看NodaTime:.NET的另一种日期和时间API,它使得使用Timezones更加明确和高效,并迫使您做出明确的决定DST的案例。此外,API引入了更多类型来处理不同的场景,在您需要使用ZonedDateTime

的情况下