Как правильно сравнивать DateTimeOffset полученный от дат созданных через new DateTime или полученных через DateTime.Now/Today ?
Иногда у них разные смещения часового пояса.
var newdate = new DateTime(2000,1,1);
newdate.Kind // Unspecified
new DateTimeOffset(newdate).Offset.Hours // 2
var now = DateTime.Now;
now.Kind // Local
new DateTimeOffset(now).Offset.Hours // 3
Полный пример с временной зоной с летним временем и кодом запущенным летом:
using System;
namespace ConsoleApp1
{
public static class Program
{
public static void Main()
{
var today = DateTime.Today;
// Today YYYY-MM-01
var firstDayMonth = new DateTimeOffset(
new DateTime(today.Year, today.Month, 1, 0, 0, 0, today.Kind).AddHours(12));
// Add year offset from 2000
DateTimeOffset withYearOffset = firstDayMonth.AddYears(2000 - firstDayMonth.Year);
// Add month offset from 1
var withMonthOffset = withYearOffset.AddMonths(1 - withYearOffset.Month);
// Add day offset from 1
var calculated_dt_2000_1_1_12_0_0 = withMonthOffset.AddDays(1 - withMonthOffset.Day);
// 01.01.2000 12:00:00 +03:00
Console.WriteLine(calculated_dt_2000_1_1_12_0_0);
var dt_2000_1_1_12_0_0 = new DateTimeOffset(new DateTime(2000, 1, 1).AddHours(12));
// 01.01.2000 12:00:00 + 02:00
Console.WriteLine(dt_2000_1_1_12_0_0);
// False
Console.WriteLine(calculated_dt_2000_1_1_12_0_0.Equals(dt_2000_1_1_12_0_0));
}
}
}
01.01.2000 12:00:00 +03:00
01.01.2000 12:00:00 +02:00
False