Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TimeZone.GetUtcOffset()需要DateTime,但DateTime';s时区被忽略了,为什么?_C#_Datetime_Timezone_Timezone Offset - Fatal编程技术网

C# TimeZone.GetUtcOffset()需要DateTime,但DateTime';s时区被忽略了,为什么?

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;

我的目标是获得UTC和其他时区之间的差异。以UTC和EST(UTC-5:00)之间的差异为例。另外,为了举例说明,假设我的系统当前处于太平洋标准时间,所以DateTime.Kind“LOCAL”是PST。为了找出UTC和EST之间的差异,我不得不提供一个日期时间,这是我在PST中提供的。下面是我的代码的简化片段:

    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,很棒的文章,谢谢!