Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get offset minutes from timezone (string) with NodaTime

Tags:

c#

.net

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.

like image 754
Axel Prieto Avatar asked Oct 12 '16 19:10

Axel Prieto


1 Answers

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.

like image 92
Jon Skeet Avatar answered Sep 19 '22 15:09

Jon Skeet