获取时区的日期时间偏移量

Man*_*kar 2 c# azure

我有一个代码,我需要在其中找到中欧时区与 UTC 的当前偏移量。

我的代码部署在 azure 应用服务中。

var offset = DateTimeOffset.Now.Offset.Hours + ":" + 
             DateTimeOffset.Now.Offset.Minutes;
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是,它依赖于服务器时间,即使我的应用服务在西欧,Azure 应用服务的时区始终是 UTC 。

一种解决方案是将 Azure App Service TimeZone 更改为 Desired TimeZone 并且它会起作用,但我也在考虑使用代码获取偏移量。

请记住,我不能使用系统日期时间来获取偏移量,因为它始终是 UTC。

无论系统日期时间如何,我都可以获得 Current Central Europe DatetimeOffset 吗?

Gar*_*eth 5

你可以做这样的事情

TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");

DateTimeOffset offset = TimeZoneInfo.ConvertTime(DateTime.Now, cet);
Run Code Online (Sandbox Code Playgroud)

如上所述这里

如果您不确定 aTimeZoneId可以使用GetSystemTimeZones()找到它。

另一种,如所描述这里,将是做这样的事情

DateTime nowCet = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, 
    "Central European Standard Time");
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您可以轻松计算两个时区之间的差异,例如

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;
Run Code Online (Sandbox Code Playgroud)