如果我只有代表时区的字符串,那么获取分钟的最简单方法是什么? (例如“欧洲/伦敦”)

到目前为止,我有:

public static int ConvertFromTimeZoneToMinutesOffset(string timeZone)
{
    DateTimeZone zone = DateTimeZoneProviders.Tzdb[timeZone];

    // Need magic code to get offset as minutes
}

但是我找不到将其转换为分钟的简单方法。

注意:我需要的是执行代码的特定时刻的偏移量。在该时区和UTC之间。

最佳答案

您需要 DateTimeZone.GetUtcOffset(Instant) :

public static int ConvertFromTimeZoneToMinutesOffset(string timeZone, IClock clock)
{
    DateTimeZone zone = DateTimeZoneProviders.Tzdb[timeZone];
    Offset offset = zone.GetUtcOffset(clock.Now);
    return offset.Milliseconds / NodaConstants.MillisecondsPerMinute;
}

您可以不使用IClock参数,而在方法中使用SystemClock.Instance,但这会导致难以测试的代码。

10-01 19:30