如果我只有代表时区的字符串,那么获取分钟的最简单方法是什么? (例如“欧洲/伦敦”)
到目前为止,我有:
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
,但这会导致难以测试的代码。