C# TimeZone.GetUtcOffset()需要DateTime,但DateTime';s时区被忽略了,为什么?
我的目标是获得UTC和其他时区之间的差异。以UTC和EST(UTC-5:00)之间的差异为例。另外,为了举例说明,假设我的系统当前处于太平洋标准时间,所以DateTime.Kind“LOCAL”是PST。为了找出UTC和EST之间的差异,我不得不提供一个日期时间,这是我在PST中提供的。下面是我的代码的简化片段:C# TimeZone.GetUtcOffset()需要DateTime,但DateTime';s时区被忽略了,为什么?,c#,datetime,timezone,timezone-offset,C#,Datetime,Timezone,Timezone Offset,我的目标是获得UTC和其他时区之间的差异。以UTC和EST(UTC-5:00)之间的差异为例。另外,为了举例说明,假设我的系统当前处于太平洋标准时间,所以DateTime.Kind“LOCAL”是PST。为了找出UTC和EST之间的差异,我不得不提供一个日期时间,这是我在PST中提供的。下面是我的代码的简化片段: public static void Run_Timezone_Test() { var myDate = DateTime.Now;
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”及其时区,为什么我必须提供“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()
)进行检查):
请注意,时区本身并不表示与UTC的偏移。时间异常(最常见的是夏令时)将改变UTC偏移量,同时仍保持在同一时区内
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()
)进行检查):
请注意,时区本身并不表示与UTC的偏移。时间异常(最常见的夏令时)将改变UTC偏移量,同时仍保持在同一时区请参阅,其中解释了“时区!=偏移量”。@MattJohnson,很棒的文章,谢谢!请参阅,其中解释了“时区!=偏移量”。@MattJohnson,很棒的文章,谢谢!