TimeZone.GetUtcOffset() 需要 DateTime,但忽略了 DateTime 的时区,为什么?
TimeZone.GetUtcOffset() Requires DateTime, but DateTime's Timezone is Ignored, why?
我的目标是获得 UTC 和另一个时区之间的时差。以 UTC 和 EST (UTC-5:00) 之间的差异为例。同样为了示例起见,假设我的系统当前处于太平洋标准时间,因此 DateTime.Kind、"LOCAL" 是太平洋标准时间。为了找到 UTC 和 EST 之间的区别,我不得不提供我在 PST 中提供的 DateTime。这是我的代码的简化片段:
public static void Run_Timezone_Test()
{
var myDate = DateTime.Now;
Console.WriteLine(myDate.Kind);
//OUTPUT: Local (note this is currently PST)
var easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var offset = easternTimeZone.GetUtcOffset(myDate);
Console.WriteLine(offset);
//OUTPUT: -05:00:00 (correct offset for EST)
Console.ReadLine();
}
如果不使用它及其时区,为什么我必须提供 "myDate"?
这是一个重要的例子:
var AUSEast = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
var offset = AUSEast.GetUtcOffset(DateTime.Now);
Console.WriteLine(offset);
offset = AUSEast.GetUtcOffset(DateTime.Now.AddMonths(6));
Console.WriteLine(offset);
在撰写本文时,这将输出(假设您已将 AEST 安装为系统时间 - 您可以通过 TimeZoneInfo.GetSystemTimeZones()
检查):
11:00:00
10:00:00
请注意,时区本身 而非 表示与 UTC 的偏移量。时间异常(最常见的是夏令时)将更改 UTC 偏移量,同时仍保持在同一时区
我的目标是获得 UTC 和另一个时区之间的时差。以 UTC 和 EST (UTC-5:00) 之间的差异为例。同样为了示例起见,假设我的系统当前处于太平洋标准时间,因此 DateTime.Kind、"LOCAL" 是太平洋标准时间。为了找到 UTC 和 EST 之间的区别,我不得不提供我在 PST 中提供的 DateTime。这是我的代码的简化片段:
public static void Run_Timezone_Test()
{
var myDate = DateTime.Now;
Console.WriteLine(myDate.Kind);
//OUTPUT: Local (note this is currently PST)
var easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var offset = easternTimeZone.GetUtcOffset(myDate);
Console.WriteLine(offset);
//OUTPUT: -05:00:00 (correct offset for EST)
Console.ReadLine();
}
如果不使用它及其时区,为什么我必须提供 "myDate"?
这是一个重要的例子:
var AUSEast = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
var offset = AUSEast.GetUtcOffset(DateTime.Now);
Console.WriteLine(offset);
offset = AUSEast.GetUtcOffset(DateTime.Now.AddMonths(6));
Console.WriteLine(offset);
在撰写本文时,这将输出(假设您已将 AEST 安装为系统时间 - 您可以通过 TimeZoneInfo.GetSystemTimeZones()
检查):
11:00:00
10:00:00
请注意,时区本身 而非 表示与 UTC 的偏移量。时间异常(最常见的是夏令时)将更改 UTC 偏移量,同时仍保持在同一时区