Skip to content

Instantly share code, notes, and snippets.

@ntxinh
Created March 8, 2021 03:49
Show Gist options
  • Save ntxinh/1b8a9eea4f5755fcdca8ef4af3e6f2b2 to your computer and use it in GitHub Desktop.
Save ntxinh/1b8a9eea4f5755fcdca8ef4af3e6f2b2 to your computer and use it in GitHub Desktop.
NodaTime
using System;
using NodaTime;
namespace Sample
{
public class NodaDateTimeUtil
{
public static DateTime ConvertToUtcFromCustomTimeZone(string timezone, DateTime datetime)
{
var zone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(timezone);
var localtime = LocalDateTime.FromDateTime(datetime);
var zonedtime = localtime.InZoneLeniently(zone);
return zonedtime.ToInstant().InZone(zone).ToDateTimeUtc();
}
public static DateTime ConvertToCustomTimeZoneFromUtc(string timezone, DateTime utcDateTime)
{
var customTimeZone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(timezone);
return Instant.FromDateTimeUtc(utcDateTime)
.InZone(customTimeZone)
.ToDateTimeUnspecified();
}
public static DateTime ConvertToUtc(DateTime dateTime, int offsetInMinutes)
{
var offset = Offset.FromHours(offsetInMinutes / 60);
var localDateTime = LocalDateTime.FromDateTime(dateTime);
return new OffsetDateTime(localDateTime, offset).ToInstant()
.ToDateTimeUtc();
}
public static DateTime ConvertFromUtc(DateTime dateTime, int offsetInMinutes)
{
var offset = Offset.FromHours(offsetInMinutes / 60);
var instant = Instant.FromDateTimeUtc(dateTime);
return instant.WithOffset(offset)
.LocalDateTime
.ToDateTimeUnspecified();
}
public static int DiffDate(DateTime dtStart, DateTime dtEnd)
{
LocalDate ldtStart = LocalDate.FromDateTime(dtStart.Date);
LocalDate ldtEnd = LocalDate.FromDateTime(dtEnd.Date);
Period period = Period.Between(ldtStart, ldtEnd, PeriodUnits.Days);
return period.Days;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment