public static void Main()
var now = DateTimeOffset.UtcNow;
var utc = TimeZoneInfo.Utc;
var hawaii = TimeZoneInfo.FindSystemTimeZoneById("Pacific/Honolulu");
var christmasIslands = TimeZoneInfo.FindSystemTimeZoneById("Pacific/Enderbury");
Console.WriteLine("DateTimeOffset to DateOnly:");
Console.WriteLine($"UTC Now: {now}");
Console.WriteLine($"Date in Hawaii: {now.ToDateOnly(hawaii)}");
Console.WriteLine($"Date In Christmas Islands: {now.ToDateOnly(christmasIslands)}");
Console.WriteLine("====================\n");
Console.WriteLine("DateOnly to DateTimeOffset");
var totallyRandomDate = DateOnly.Parse("2020-03-11");
Console.WriteLine($"DateTimeOffset UTC: {totallyRandomDate.ToDateTimeOffset(utc)}");
Console.WriteLine($"DateTimeOffset Hawaii: {totallyRandomDate.ToDateTimeOffset(hawaii)}");
Console.WriteLine($"DateTimeOffset Christmas Islands: {totallyRandomDate.ToDateTimeOffset(christmasIslands)}");
public static class DateOnlyExtensions {
public static DateTimeOffset ToDateTimeOffset(this DateOnly dateOnly, TimeZoneInfo zone) {
var dateTime = dateOnly.ToDateTime(new TimeOnly(0));
return new DateTimeOffset(dateTime, zone.GetUtcOffset(dateTime));
public static DateOnly ToDateOnly(this DateTimeOffset dto, TimeZoneInfo zone) {
var inTargetZone = TimeZoneInfo.ConvertTime(dto, zone);
return DateOnly.FromDateTime(inTargetZone.Date);