"GMT Standard Time" 是否意味着 BST?
Does "GMT Standard Time" imply BST?
我对"GMT Standard Time"感到困惑。
我的数据仅存储为 DATE,但实际上是 BST 下午 6 点。
我读进去加了18小时。然后我尝试转换为 UTC。我最初的理解是转换不会考虑夏令时(因为 "GMT Standard Time" 和 UTC 都没有夏令时)。我以为我必须在源上测试日光时间然后进行调整。
但是,ConvertTime 似乎知道源中的夏令时并进行适当的更改。
我觉得这很奇怪 - 这是预期的行为吗?
TimeZoneInfo gmtZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo utcZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
public static CultureInfo ci = CultureInfo.InvariantCulture;
string SomeDT = "27/01/2000"; //First BST day
var sourceDT = DateTime.ParseExact(SomeDT, "dd/MM/yyyy", ci).AddHours(18);
var utcDT = TimeZoneInfo.ConvertTime(sourceDT, gmtZone, utcZone);
// At this point utcDT has already been changed so test below is redundant.
// That Suggest "GMT Standard Time" is actually "Daylight Time" i.e.BST
if (gmtZone.IsDaylightSavingTime(sourceDT))
{
utcDT = utcDT.AddHours(-1);
}
else
{
Console.WriteLine("Not BST");
}
问题是 Windows 中的时区 ID 令人困惑。即使 ID 是 "GMT Standard Time",该 ID 引用的时区实际上是 "UK time"... 就像 IANA 中的 "Europe/London"。所以是的,它将遵守夏令时。
如果您想要真正的 UTC,只需使用 TimeZoneInfo.Utc
。
(或者,使用 Noda Time or something similar instead, and the more standard IANA time zones...)
我对"GMT Standard Time"感到困惑。
我的数据仅存储为 DATE,但实际上是 BST 下午 6 点。
我读进去加了18小时。然后我尝试转换为 UTC。我最初的理解是转换不会考虑夏令时(因为 "GMT Standard Time" 和 UTC 都没有夏令时)。我以为我必须在源上测试日光时间然后进行调整。
但是,ConvertTime 似乎知道源中的夏令时并进行适当的更改。
我觉得这很奇怪 - 这是预期的行为吗?
TimeZoneInfo gmtZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo utcZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
public static CultureInfo ci = CultureInfo.InvariantCulture;
string SomeDT = "27/01/2000"; //First BST day
var sourceDT = DateTime.ParseExact(SomeDT, "dd/MM/yyyy", ci).AddHours(18);
var utcDT = TimeZoneInfo.ConvertTime(sourceDT, gmtZone, utcZone);
// At this point utcDT has already been changed so test below is redundant.
// That Suggest "GMT Standard Time" is actually "Daylight Time" i.e.BST
if (gmtZone.IsDaylightSavingTime(sourceDT))
{
utcDT = utcDT.AddHours(-1);
}
else
{
Console.WriteLine("Not BST");
}
问题是 Windows 中的时区 ID 令人困惑。即使 ID 是 "GMT Standard Time",该 ID 引用的时区实际上是 "UK time"... 就像 IANA 中的 "Europe/London"。所以是的,它将遵守夏令时。
如果您想要真正的 UTC,只需使用 TimeZoneInfo.Utc
。
(或者,使用 Noda Time or something similar instead, and the more standard IANA time zones...)