.net 为什么用C#从postgress获取utc日期时会自动添加几个小时?

polhcujo  于 2023-06-07  发布在  .NET
关注(0)|答案(1)|浏览(185)

我们有UTC日期存储在postgress,我有一个要求,我需要显示在服务器的时区日期。为此,我做了如下更改:
selectedAttempt是一个保存postgress中所有数据的对象。

var assignmentDate = (selectedAttempt?.DateCreatedUtc) ?? DateTime.MinValue;
var dateinServerTimezone = TimeZoneInfo.ConvertTimeFromUtc(assignmentDate, TimeZoneInfo.Local).ToString(dateFormate, CultureInfo.InvariantCulture);

但是当我看到selectedAttempt?.DateCreatedUtc时,它已经与postgress中存储的日期不同,我无法理解为什么会这样?
我的时区:印度标准时间

postgress中保存的utc日期:“2023-01-30 17:54:15.13-06”

我在C#中看到了什么?

kkbh8khc

kkbh8khc1#

您观察到的差异是由于在C#中从PostgreSQL检索日期时发生的时区转换。日期本身保持不变,但表示形式会根据时区转换而更改。要以服务器的时区显示日期,可以尝试使用TimeZoneInfo.ConvertTimeFromUtc方法,就像在代码中所做的那样。这会将UTC日期转换为所需的时区。在本例中,您使用的是TimeZoneInfo.Local,它表示代码运行所在服务器的本地时区。结果dateinServerTimezone将在服务器的时区中。如果您希望显示原始UTC日期,而不进行时区转换,可以使用DateTime.ToUniversalTime方法。

相关问题