Сегодня я сильно запутался, когда разговаривал с коллегой, поэтому, пожалуйста, извините. У меня есть это:
- дата: 2020-04-01 (гггг-мм-дд)
- время: 10: 00: 00
- часовой пояс: +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, но мы так много обсуждали, что я не знаю, что и думать.
Надеюсь, кто-то может помочь.