【发布时间】:2018-08-29 10:46:22
【问题描述】:
有没有办法检查它是否是 UTC 的 DST(夏令时),不使用转换?
我不想使用转换,因为它在 10 月 28 日凌晨 2 点不明确。这个:
using System;
namespace Rextester
{
public class Program
{
public static void PrintSeasonKindTime(DateTime utcDate)
{
// Convert dt to Romance Standard Time
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
DateTime localDate = TimeZoneInfo.ConvertTime(utcDate, tzi);
Console.WriteLine("Local date: " + localDate.ToString("yyyy.MM.d HH:mm:ss") + (tzi.IsDaylightSavingTime(localDate) ? " is summer" : " is winter"));
}
public static void Main(string[] args)
{
DateTime currentUTCDateTime = new DateTime(2018,10,27,23,59,0, DateTimeKind.Utc);
double nbMinutes = 1.0;
PrintSeasonKindTime(currentUTCDateTime);
PrintSeasonKindTime(currentUTCDateTime.AddMinutes(nbMinutes));
}
}
}
会显示这个:
Local date: 2018.10.28 01:59:00 is summer
Local date: 2018.10.28 02:00:00 is winter
虽然我希望以下显示:
Local date: 2018.10.28 01:59:00 is summer
Local date: 2018.10.28 02:00:00 is summer
由于时间更改是在指定时区的当地时间 2018.10.28 03:00:00 而不是凌晨 2 点(请参阅此处enter link description here)。
但是,这种行为“模棱两可”是正确的,因为它是 10 月 28 日凌晨 2 点的两次;一次在 00:00 UTC(夏季时间凌晨 2 点)和凌晨 1 点(冬季时间凌晨 2 点)一次。你有什么想法吗?
【问题讨论】:
-
夏令时特定于国家(即位置,而不是时区)。 UTC 只是世界时。显然,UTC 不包含任何特定于国家/地区的信息。 (此外,由于 DST 是一个国家/地区的一项功能/决定,将 UTC 转换为其他时区并没有真正的帮助)
-
夏令时本质上是模棱两可的。没有办法让它不模棱两可。
-
@elgonzo:如果不同的国家有不同的夏令时规则,他们会遵守不同的时区。此外,无论如何,“国家”是错误的粒度单位:一些国家遵守多个时区,其中一些国家遵守 DST,而另一些则没有。美国就是一个例子。
-
“我不想使用转换,因为它在 10 月 28 日凌晨 2 点不明确。”不是凌晨 2 点 UTC。如果您从 UTC 开始,那就没有歧义了。