DateTime转为特定时区时间

先来看一个例子:

static void Main(string[] args)
{
    Console.WriteLine($"本地当前时间:{DateTime.Now}");
    Console.WriteLine($"UTC当前时间:{DateTime.UtcNow}");
    Console.WriteLine($"当前日期时区:{DateTime.Now.ToString("zzzz")}");
    Console.WriteLine($"当前日期时区:{DateTime.UtcNow.ToString("zzzz")}");
    Console.ReadLine();
}

看看输出:

本地当前时间:2020/5/20 10:15:18
UTC当前时间:2020/5/20 2:15:18
当前日期时区:+08:00
当前日期时区:+00:00

无论DateTime.Now还是DateTime.UtcNow都是DateTime类型。之所以能输出不同的时区,必然是因为DateTime变量在存储时就带有时区信息。因此,任何一个DateTime变量,都可以转换成本地时间或者任一一个时区的时间。假设我们要把当前时间转为东九区时间,示例:

static void Main(string[] args)
        {
            DateTime currentZone = DateTime.Now;
            Console.WriteLine($"当前时区时间:{currentZone}");
            DateTime utcZone = DateTime.Now.ToUniversalTime();
            Console.WriteLine($"当前时区时间的UTC时间:{utcZone}");
            //转为东九区时间
            DateTime east9 = TimeZoneInfo.ConvertTime(currentZone, TimeZoneInfo.FindSystemTimeZoneById("Korea Standard Time"));
            Console.WriteLine($"当前东九区时间:{east9}");
            east9 = TimeZoneInfo.ConvertTime(utcZone, TimeZoneInfo.FindSystemTimeZoneById("Korea Standard Time"));
            Console.WriteLine($"当前东九区时间:{east9}");
            Console.ReadLine();
        }
    }

看看输出:

当前时区时间:2020/5/20 10:52:10
当前时区时间的UTC时间:2020/5/20 10:52:10
当前东九区时间:2020/5/20 11:52:10
当前东九区时间:2020/5/20 11:52:10

可以看到,输出的时间都是相同的,和我们设想的一致。关于TimezonId,可以通过GetSystemTimeZones方法获取,或者直接查看 Windows 系统注册表的 HKEY_LOCAL_MACHINE \Software\Microsoft\Windows NT\CurrentVersion\Time Zone 项的子项。

参考文章:

  1. https://docs.microsoft.com/zh-cn/dotnet/api/system.timezoneinfo.getsystemtimezones?view=netcore-3.1

你可能感兴趣的:(C#)