.Net6 指定时区
UTC时间
获取当前UTC时间
将UTC时间转换成中国区时间
常用时区
扩展方法
最近相当忙!忙着学这学那的,各种考试。以及项目上也有很多改动。还有这恶心的时间问题(特别注意当使用容器的时候的时间问题希望大家尽量用DateTime.UtcNow
。.
UTC时间
简单来说这是一个时间的标准,像中国就是东八区,在UTC的时间之上加多少时间就是对应的中国时间(以此类推)。
获取当前UTC时间
DateTime.UtcNow;
将UTC时间转换成中国区时间
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();
那你说:我怎么知道它哪个时区叫什么名字?通过下面的代码可以获取所有的UTC时区的名字。
//查看所有地区时间信息
IList<TimeZoneInfo> lines = TimeZoneInfo.GetSystemTimeZones();
//世界主要时区有如下这些
(UTC-12:00) 国际日期变更线西
(UTC-11:00) 协调世界时-11
(UTC-10:00) 夏威夷
(UTC-10:00) 阿留申群岛
(UTC-09:30) 马克萨斯群岛
(UTC-09:00) 协调世界时-09
(UTC-09:00) 阿拉斯加
(UTC-08:00) 下加利福尼亚州
(UTC-08:00) 协调世界时-08
(UTC-08:00) 太平洋时间(美国和加拿大)
(UTC-07:00) 亚利桑那
(UTC-07:00) 奇瓦瓦,拉巴斯,马萨特兰
(UTC-07:00) 山地时间(美国和加拿大)
(UTC-07:00) 育空
(UTC-06:00) 中美洲
(UTC-06:00) 中部时间(美国和加拿大)
(UTC-06:00) 复活节岛
(UTC-06:00) 瓜达拉哈拉,墨西哥城,蒙特雷
(UTC-06:00) 萨斯喀彻温
(UTC-05:00) 东部时间(美国和加拿大)
(UTC-05:00) 切图马尔
(UTC-05:00) 印地安那州(东部)
(UTC-05:00) 哈瓦那
(UTC-05:00) 波哥大,利马,基多,里奥布朗库
(UTC-05:00) 海地
(UTC-05:00) 特克斯和凯科斯群岛
(UTC-04:00) 乔治敦,拉巴斯,马瑙斯,圣胡安
(UTC-04:00) 亚松森
(UTC-04:00) 加拉加斯
(UTC-04:00) 圣地亚哥
(UTC-04:00) 大西洋时间(加拿大)
(UTC-04:00) 库亚巴
(UTC-03:30) 纽芬兰
(UTC-03:00) 卡宴,福塔雷萨
(UTC-03:00) 圣皮埃尔和密克隆群岛
(UTC-03:00) 巴西利亚
(UTC-03:00) 布宜诺斯艾利斯
(UTC-03:00) 格陵兰
(UTC-03:00) 萨尔瓦多
(UTC-03:00) 蒙得维的亚
(UTC-03:00) 蓬塔阿雷纳斯
(UTC-03:00) 阿拉瓜伊纳
(UTC-02:00) 中大西洋 - 旧用
(UTC-02:00) 协调世界时-02
(UTC-01:00) 亚速尔群岛
(UTC-01:00) 佛得角群岛
(UTC) Coordinated Universal Time
(UTC+00:00) 圣多美
(UTC+00:00) 蒙罗维亚,雷克雅未克
(UTC+00:00) 都柏林,爱丁堡,里斯本,伦敦
(UTC+01:00) 卡萨布兰卡
(UTC+01:00) 中非西部
(UTC+01:00) 布鲁塞尔,哥本哈根,马德里,巴黎
(UTC+01:00) 萨拉热窝,斯科普里,华沙,萨格勒布
(UTC+01:00) 贝尔格莱德,布拉迪斯拉发,布达佩斯,卢布尔雅那,布拉格
(UTC+01:00) 阿姆斯特丹,柏林,伯尔尼,罗马,斯德哥尔摩,维也纳
(UTC+02:00) 加沙,希伯伦
(UTC+02:00) 加里宁格勒
(UTC+02:00) 哈拉雷,比勒陀利亚
(UTC+02:00) 喀土穆
(UTC+02:00) 基希讷乌
(UTC+02:00) 大马士革
(UTC+02:00) 安曼
(UTC+02:00) 开罗
(UTC+02:00) 朱巴
(UTC+02:00) 温得和克
(UTC+02:00) 的黎波里
(UTC+02:00) 耶路撒冷
(UTC+02:00) 贝鲁特
(UTC+02:00) 赫尔辛基,基辅,里加,索非亚,塔林,维尔纽斯
(UTC+02:00) 雅典,布加勒斯特
(UTC+03:00) 伊斯坦布尔
(UTC+03:00) 内罗毕
(UTC+03:00) 巴格达
(UTC+03:00) 明斯克
(UTC+03:00) 科威特,利雅得
(UTC+03:00) 莫斯科,圣彼得堡
(UTC+03:30) 德黑兰
(UTC+04:00) 伊热夫斯克,萨马拉
(UTC+04:00) 伏尔加格勒
(UTC+04:00) 埃里温
(UTC+04:00) 巴库
(UTC+04:00) 第比利斯
(UTC+04:00) 萨拉托夫
(UTC+04:00) 路易港
(UTC+04:00) 阿布扎比,马斯喀特
(UTC+04:00) 阿斯特拉罕,乌里扬诺夫斯克
(UTC+04:30) 喀布尔
(UTC+05:00) 伊斯兰堡,卡拉奇
(UTC+05:00) 克孜洛尔达
(UTC+05:00) 叶卡捷琳堡
(UTC+05:00) 阿什哈巴德,塔什干
(UTC+05:30) 斯里加亚渥登普拉
(UTC+05:30) 钦奈,加尔各答,孟买,新德里
(UTC+05:45) 加德满都
(UTC+06:00) 达卡
(UTC+06:00) 鄂木斯克
(UTC+06:00) 阿斯塔纳
(UTC+06:30) 仰光
(UTC+07:00) 克拉斯诺亚尔斯克
(UTC+07:00) 巴尔瑙尔,戈尔诺-阿尔泰斯克
(UTC+07:00) 托木斯克
(UTC+07:00) 新西伯利亚
(UTC+07:00) 曼谷,河内,雅加达
(UTC+07:00) 科布多
(UTC+08:00) 乌兰巴托
(UTC+08:00) 伊尔库茨克
(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
(UTC+08:00) 台北
(UTC+08:00) 吉隆坡,新加坡
(UTC+08:00) 珀斯
(UTC+08:45) 尤克拉
(UTC+09:00) 大阪,札幌,东京
(UTC+09:00) 平壤
(UTC+09:00) 赤塔市
(UTC+09:00) 雅库茨克
(UTC+09:00) 首尔
(UTC+09:30) 达尔文
(UTC+09:30) 阿德莱德
(UTC+10:00) 关岛,莫尔兹比港
(UTC+10:00) 堪培拉,墨尔本,悉尼
(UTC+10:00) 布里斯班
(UTC+10:00) 符拉迪沃斯托克
(UTC+10:00) 霍巴特
(UTC+10:30) 豪勋爵岛
(UTC+11:00) 乔库尔达赫
(UTC+11:00) 布干维尔岛
(UTC+11:00) 所罗门群岛,新喀里多尼亚
(UTC+11:00) 萨哈林
(UTC+11:00) 诺福克岛
(UTC+11:00) 马加丹
(UTC+12:00) 协调世界时+12
(UTC+12:00) 奥克兰,惠灵顿
(UTC+12:00) 彼得罗巴甫洛夫斯克-堪察加 - 旧用
(UTC+12:00) 斐济
(UTC+12:00) 阿纳德尔,堪察加彼得罗巴甫洛夫斯克
(UTC+12:45) 查塔姆群岛
(UTC+13:00) 努库阿洛法
(UTC+13:00) 协调世界时+13
(UTC+13:00) 萨摩亚群岛
(UTC+14:00) 圣诞岛
然后给你们写几个常用的时区。
常用时区
国家 | 代码 | 时区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 | 东部澳大利亚标准时间 |
扩展方法
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;
}
}
注意:必须通过DateTime.UtcNow
来调扩展方法哟,然后需要哪些自己取舍