我们有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#中看到了什么?
1条答案
按热度按时间kkbh8khc1#
您观察到的差异是由于在C#中从PostgreSQL检索日期时发生的时区转换。日期本身保持不变,但表示形式会根据时区转换而更改。要以服务器的时区显示日期,可以尝试使用TimeZoneInfo.ConvertTimeFromUtc方法,就像在代码中所做的那样。这会将UTC日期转换为所需的时区。在本例中,您使用的是TimeZoneInfo.Local,它表示代码运行所在服务器的本地时区。结果dateinServerTimezone将在服务器的时区中。如果您希望显示原始UTC日期,而不进行时区转换,可以使用DateTime.ToUniversalTime方法。