我有一个代码,我需要找到UTC中欧时区的当前偏移量。
我的代码部署在azure app service中。
var offset = DateTimeOffset.Now.Offset.Hours + ":" +
DateTimeOffset.Now.Offset.Minutes;
上述代码的问题在于,它依赖于服务器时间,即使我的App Service位于西欧,Azure App Service的时区也始终为UTC。
一种解决方案是将Azure App Service TimeZone更改为Desired TimeZone,它可以正常工作,但我也在考虑使用代码获取偏移量。
请记住,我不能使用系统日期时间来获取偏移量,因为它始终是UTC。
无论系统日期时间如何,我都可以获得Current Central Europe DatetimeOffset吗?
答案 0 :(得分:2)
你可以做这样的事情
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
DateTimeOffset offset = TimeZoneInfo.ConvertTime(DateTime.Now, cet);
如上所述here。
如果您对TimeZoneId
不确定,可以使用GetSystemTimeZones()进行查找。
如here所描述的另一种方法是做类似的事情
DateTime nowCet = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now,
"Central European Standard Time");
关于这一点的好处是你可以轻松地计算两个时区之间的差异,例如
DateTime newYork = new DateTime(2017, 10, 04, 12, 23, 00);
DateTime berlin = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(newYork,
"Eastern Standard Time", "Central European Standard Time");
TimeSpan diff = berlin - newYork;
答案 1 :(得分:0)
您可以使用TimeZoneInfo
:
TimeZoneInfo cetInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
DateTimeOffset cetTime = TimeZoneInfo.ConvertTime(DateTimeOffset.Now, cetInfo);
答案 2 :(得分:0)
使用正确的夏令时偏移(CET 中的示例):
DateTime utcDT = DateTime.UtcNow;
DateTime cetDT = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcDT, "UTC", "Central European Standard Time");
DateTimeOffset utcDTO = new DateTimeOffset(utcDT);
DateTimeOffset cetDTO = new DateTimeOffset(cetDT, cetDT - utcDT);
// Result (with daylight saving)
//
// 2021. 06. 24. 7:42:09
// 2021. 06. 24. 9:42:09
// 2021. 06. 24. 7:42:09 +00:00
// 2021. 06. 24. 9:42:09 +02:00