DateTimeOffset и DateTime
От: _NN_ www.nemerleweb.com
Дата: 13.07.21 09:43
Оценка:
Как правильно сравнивать 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
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 14.07.2021 20:35 _NN_ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.