【发布时间】:2018-08-27 19:32:38
【问题描述】:
我有一个 UTC 输入时间,并希望将其转换为设备的本地时间。我想使用 TryParse 方法来避免异常。
输入时间是晚上 7 点。预计 out DateTime date 参数为 20:00。相反,它变成了 21:00。
我的时区是 GMT+1 中欧时间。目前不是 DST,但 DST 将于今年 3 月下旬开始。
var value = "4/2/2018 7:00:00 PM"; // UTC time
if (DateTime.TryParse(value.ToString(), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime date))
{
var isDST = date.IsDaylightSavingTime(); // true
var kind = date.Kind; // DateTimeKind.Local
var time = date.ToShortTimeString(); // 21:00
}
【问题讨论】:
-
DateTimeStyles.AssumeLocal -
您需要提供有关您的时区的更多信息(不仅仅是偏移量)
-
@javm 设备设置为哪个时区?我问的不是 +/- 小时,而是国家/州名称。您是说本月晚些时候开始,4 月 2 日将在 DST 内,如果您的时区在 DST 期间从 +1 更改为 +2,则代码正在运行正确。
-
@javm 见,it is correct。 2018-04-02T19:00:00UTC 将是 21:00,因为那天您的本地时区将是 +2 而不是 +1。
-
"4/2/2018" 是 4 月 2 日,所以它属于从 3 月底开始的 DST。所以输出是正确的,因为 UTC 7 PM 是您的时区 9 PM(1 小时常规偏移 + 1 小时 DST 偏移)。