gpt4 book ai didi

c# - 在 C# 中比较 UTC 时间和本地时间

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:31 33 4
gpt4 key购买 nike

我有一个用 C# 编写的 Windows 控制台应用程序,它需要将当前时间与存储在数据库中的两次时间进行比较。日期和时间在插入数据库之前转换为 UTC。现在,我需要获取这些值并只将时间部分与本地时间进行比较。假设我的日期如下:

DateTime dt1 = new DateTime(2013, 08, 29, 00, 00, 00)
DateTime dt2 = new DateTime(2013, 08, 29, 23, 59, 59)

当我将这两个日期转换为 UTC 并存储在数据库中时,我的数据库值看起来像“28/08/2013 18:30:00”和“29/08/2013 18:00:00”。

假设我当前的本地时间是“14:00:00”,我要检查的条件是,我的本地时间应该在我的数据库日期时间值的时间部分之间。喜欢

if(DateTime.Now.TimeOfDay >= DBTime1 && DateTime.Now.TimeOfDay <= DBTime2)`
{
//true condition logic
}

如果我将数据库日期时间转换为本地日期时间并进行比较,它在我的本地系统中按预期工作。我怀疑如果应用程序托管在英国的服务器上并从印度访问它,时间比较是否会按预期工作?在转换为本地时间时,我们是否需要考虑任何其他因素,例如 DST(夏令时)或时区?

最佳答案

.NET 中似乎存在一个错误(或者一个糟糕的设计选择)。正如您在 reference source 中看到的那样从第 1221 行开始,DateTime 比较代码只是比较 InternalTicks 属性,该属性具有非时区调整的刻度。这意味着这段代码:

if (ticket.Expiration > DateTime.UtcNow)

与此代码的行为不同:

if (ticket.Expiration.ToUniversalTime() > DateTime.UtcNow)

即使 DateTimeKind 已明确且正确设置。

关于c# - 在 C# 中比较 UTC 时间和本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515072/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com