DateTimeOffset: является ли DateTime местным временем или временем UT C? - PullRequest
0 голосов
/ 01 апреля 2020

Сегодня я сильно запутался, когда разговаривал с коллегой, поэтому, пожалуйста, извините. У меня есть это:

  1. дата: 2020-04-01 (гггг-мм-дд)
  2. время: 10: 00: 00
  3. часовой пояс: +2

Когда я возвращаю это моему коллеге, я делаю это через API, который возвращает json, он возвращает что-то в строке

{
    ...
    "dateTimeOffset": "2020-04-01T10:00:00+02:00"
    ...
}

Я создаю свой DateTimeOffset следующим образом :

var utc = DateTime.UtcNow;
string time = "10:00:00";
string timezoneIdentifier = "Romance Standard Time";
var date = DateTime.Now.Date;
 var zone = TimeZoneInfo.FindSystemTimeZoneById(timezoneIdentifier);
var timespanOffset = zone.GetUtcOffset(utc);

var baseDateTime = date + TimeSpan.Parse(time);
baseDateTime= DateTime.SpecifyKind(baseDateTime, DateTimeKind.Unspecified);
var dateTimeOffset = new DateTimeOffset(baseDateTime, timespanOffset);

Когда он вытягивает его, его часть конвертирует время в «12:00:00», то есть: оно добавляет часовой пояс, и это действительно меня заводит, потому что я так растерялся, потому что он хотел, чтобы я отправил ему «08:00:00 +2», чтобы он показывался правильно конечному пользователю, но я отказался, потому что я понимаю: часть времени местное время и +2 описывает смещение от UT C, и это не наоборот: часть времени равна UT C, и вам нужно добавить смещение, чтобы получить местное время. Я не могу найти его нигде в документации: https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset?view=netcore-2.2, кроме

Структура DateTimeOffset включает значение DateTime вместе со свойством Offset, которое определяет разницу между текущая дата и время экземпляра DateTimeOffset и всемирное координированное время (UT C). Поскольку он точно определяет дату и время относительно UT C, структура DateTimeOffset не включает члена Kind, так как структура DateTime имеет значение

Но для меня этого недостаточно. Мой мозг не примет это. Итак: 1. время в DateTimeOffset - местное время данной зоны, или 2. время UT C, и вы должны добавить / вычесть смещение, чтобы получить местное время

* 1029. * Я знаю, что это должно быть основа c, но мы так много обсуждали, что я не знаю, что и думать.

Надеюсь, кто-то может помочь.

...