获取时区的{date} Off

时间:2017-10-04 09:09:37

标签: c# azure

我有一个代码,我需要找到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吗?

3 个答案:

答案 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