Test.LogRange(new DateOnly(2022, 9, 3));
Console.WriteLine("start dst");
Test.LogRange(new DateOnly(2022, 3, 26));
Test.LogRange(new DateOnly(2022, 3, 27));
Test.LogRange(new DateOnly(2022, 3, 28));
Console.WriteLine("end dst");
Test.LogRange(new DateOnly(2022, 10, 29));
Test.LogRange(new DateOnly(2022, 10, 30));
Test.LogRange(new DateOnly(2022, 10, 31));
public static DateTimeOffset NLDayToUTC(DateOnly day)
var ts = TimeZoneInfo.FindSystemTimeZoneById("Europe/Amsterdam");
var date = new DateTimeOffset(day.Year,day.Month, day.Day, 0, 0, 0, ts.BaseUtcOffset);
if (ts.IsDaylightSavingTime(date))
date = new DateTimeOffset(date.DateTime, date.Offset.Add(TimeSpan.FromHours(1)));
return date.ToUniversalTime().DateTime;
public static void LogRange(DateOnly day)
var start = NLDayToUTC(day);
var end = NLDayToUTC(day.AddDays(1));
var hours = (end-start).TotalHours;
Console.WriteLine($"{day.ToString("yyy-MM-dd")} = {start.ToString("yyy-MM-dd HH:mm:ss zz")} - {end.ToString("yyy-MM-dd HH:mm:ss zz")} ({hours} hours)");