Skip to content

Instantly share code, notes, and snippets.

@scottcate
Created August 28, 2012 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottcate/3503559 to your computer and use it in GitHub Desktop.
Save scottcate/3503559 to your computer and use it in GitHub Desktop.
Extension methods for Noda Time - to
using System;
using NodaTime;
using NodaTime.TimeZones;
namespace Whatever
{
public static class DateTimeExtensions
{
public static DateTime AdjustTo(this DateTime date, string timeZoneId)
{
if (date == DateTime.MinValue)
return date;
DateTimeZone.SetProvider(new BclTimeZoneProvider());
var zone = DateTimeZone.ForId(timeZoneId ?? "UTC");
var dateTime = new ZonedDateTime(Instant.FromDateTimeUtc(date.ToUniversalTime()), zone);
return dateTime.ToDateTimeUnspecified();
}
public static DateTime ToUtc(this DateTime date)
{
return date.ToUtc("UTC");
}
public static DateTime ToUtc(this DateTime date, string timeZoneId)
{
//Tell noda time to use the BCL for time zones
DateTimeZone.SetProvider(new BclTimeZoneProvider());
//This will ensure that the time zone is valid.
DateTimeZone dateTimeZone = DateTimeZone.ForId(timeZoneId);
//Has no time zone info
LocalDateTime rawDateTime = LocalDateTime.FromDateTime(date);
ZonedDateTime dateTime = dateTimeZone.AtExactly(rawDateTime);
return dateTime.ToDateTimeUtc();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment