DateTime to int (по мск)

195
21 октября 2021, 07:10

DateTime.Now выводит текущее московское время, но почему при переводе DateTime.Now в int

(int)(DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds

И затем обратно в DateTime получается уже не Московское время, а время на три часа позже

Answer 1

Вы проверяете значение в Unix Time конвертере.

Unix Time - это количество секунд, прошедших с 1970-01-01 00:00:00 UTC.

Проблема в том, что оператор вычитания для DateTime не учитывает свойство Kind и таймзону вообще. Перед его использованием нужно явно приводить оба аргумента к одной таймзоне, иначе результат поплывет:

The Subtraction(DateTime, DateTime) method does not consider the value of the Kind property of the two DateTime values when performing the subtraction. Before subtracting DateTime objects, ensure that the objects represent times in the same time zone. Otherwise, the result will include the difference between time zones.

Вот этот difference в 3 часа вы и видите.

Вам нужно или использовать время в UTC при вычислении:

(int)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;

В случае не Now:

(int)(somedatetime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
READ ALSO
Memory Mapped File в C# (Linux)

Memory Mapped File в C# (Linux)

Подскажите, пожалуйста, какой-нибудь простой пример использования Memory Mapped File на C#(Как вариант, обмен состояниями потока между родительской...

178
Загрузка AssetBundle с хостинга в Unity

Загрузка AssetBundle с хостинга в Unity

Необходимо загрузить AssetBundle с хостингаНаписал такой код для загрузки с сервера:

91