Reputation: 605
What's the easiest way to get the minutes if I only have a string that represents the timezone? (for example "Europe/London")
So far I have:
public static int ConvertFromTimeZoneToMinutesOffset(string timeZone)
{
DateTimeZone zone = DateTimeZoneProviders.Tzdb[timeZone];
// Need magic code to get offset as minutes
}
But I'm not finding an easy approach to convert it to minutes.
NOTE: What I need is the offset in that specific moment in which the code is being executed. Between that timezone and UTC.
Upvotes: 12
Views: 4803
Reputation: 1500805
You need 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;
}
You could leave off the IClock
parameter and instead use SystemClock.Instance
in the method, but that leads to code which is harder to test.
Upvotes: 26