.Net6 指定时区 电脑版发表于:2022/6/20 16:22 ![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.Net6 指定时区 [TOC] tn2>最近相当忙!忙着学这学那的,各种考试。以及项目上也有很多改动。还有这恶心的时间问题(特别注意当使用容器的时候的时间问题希望大家尽量用`DateTime.UtcNow`。 UTC时间 ------------ tn2>简单来说这是一个时间的标准,像中国就是东八区,在UTC的时间之上加多少时间就是对应的中国时间(以此类推)。 获取当前UTC时间 ------------ ```csharp DateTime.UtcNow; ``` 将UTC时间转换成中国区时间 ------------ ```csharp var name = "China Standard Time"; // 中国:China Standard Time // 意大利:W. Europe Standard Time // 获取当前时区 TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(name); // 将UTC时间转换成中国时区的时间 DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(time), easternZone); string nowtime = easternTime.ToString(); ``` tn2>那你说:我怎么知道它哪个时区叫什么名字?通过下面的代码可以获取所有的UTC时区的名字。 ```csharp //查看所有地区时间信息 IList<TimeZoneInfo> lines = TimeZoneInfo.GetSystemTimeZones(); ``` tn2>给你们截张图 ![](https://img.tnblog.net/arcimg/hb/e59090384d7e483184e4724475e3a82e.png) tn2>然后给你们写几个常用的时区。 常用时区 ------------ |国家 |代码|时区ID|标准名称| | ------------ | ------------ | |美国|US|Pacific Standard Time|太平洋标准时间 |英国|GB|GMT Standard Time|GMT 标准时间 |德国|DE|W. Europe Standard Time|西欧标准时间 |法国|FR|Romance Standard Time|罗马标准时间 |日本|JP|Tokyo Standard Time|东京标准时间 |意大利|IT|W. Europe Standard Time|西欧标准时间 |西班牙|ES|Romance Standard Time|罗马标准时间 |加拿大|CA|Pacific Standard Time|太平洋标准时间 |墨西哥|MX|Central Standard Time (Mexico)|中部标准时间(墨西哥) |中国|CN|China Standard Time|中国标准时间 |澳大利亚|AU|E. Australia Standard Time|东部澳大利亚标准时间 扩展方法 ------------ ```csharp public static class DateZoneTimeExtension { public enum LocalTimeZoneEnum { China = 1050, Italy = 1000, US = 1100, } static string LocalTimeZoneEnumLong(LocalTimeZoneEnum time) => time switch { LocalTimeZoneEnum.China => "China Standard Time", LocalTimeZoneEnum.Italy => "W. Europe Standard Time", LocalTimeZoneEnum.US => "Pacific Standard Time", _ => throw new NotImplementedException() }; public static DateTime ToLocalTimeZone(this DateTime time, LocalTimeZoneEnum localTimeZoneEnum) { TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(LocalTimeZoneEnumLong(localTimeZoneEnum)); DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(time, easternZone); return easternTime; } } ``` tn>注意:必须通过`DateTime.UtcNow`来调扩展方法哟,然后需要哪些自己取舍