Axel Prieto Axel Prieto - 1 year ago 151
C# Question

Get offset minutes from timezone (string) with NodaTime

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.

Answer Source

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 / NodaConstant.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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download