Получить временную метку вкл. часовой пояс с datetime.now () - PullRequest
0 голосов
/ 14 января 2020

Я использую программное обеспечение, где они генерируют время и дату для записей, например:

20200110T091352 + 0100

Теперь мне нужно сгенерировать аналогичный формат даты в C#

Что я могу понять из отметки времени:

  • 2020: год
  • 01: месяц
  • 10: день
  • T091352: ?? микросекунды?
  • + 0100: часовой пояс

Что я получил до сих пор:

DateTime.Now.ToString("yyyyMMdd")

Спасибо за любые подсказки, которые указывают мне правильное направление.

1 Ответ

1 голос
/ 16 января 2020

20200110T091352 + 0100

Это ISO 8601 Basi c Формат для "полного представления" со смещением. Это определено в разделе 4.3.2 ISO 8601: 2004 (E).

Это может выглядеть странно, потому что часто, когда люди говорят о ISO 8601, они имеют в виду Расширенный формат , который для Ваш пример будет 2020-01-10T09:13:52+01:00. Оба формата (и другие) являются частью спецификации ISO 8601.

T091352 представляет время дня, 09:13:52. +0100 указывает на смещение часового пояса для этого местного времени. Другими словами, 09:13:52 был на 1 час раньше UT C (что было бы 08:13:52 для того же момента времени).

Вы можете лучше узнать текущее время в этом от. NET форматируется следующим образом:

DateTimeOffset now = DateTimeOffset.Now;
string formatted = now.ToString("yyyyMMddTHHmmsszzz", CultureInfo.InvariantCulture).Remove(18,1);

Работает. NET Скрипка здесь.

.Remove(18,1) принимает двоеточие (:) вне строки смещения, созданной в указанном формате zzz. К сожалению,. NET не имеет спецификатора формата для смещения, показывающего часы и минуты без двоеточия. Вы можете получить те же результаты с .Replace(":",""), если хотите.

Также обратите внимание, что я использовал DateTimeOffset вместо DateTime, потому что вы хотите, чтобы смещение всегда отображалось в ответе правильно. zzz не рекомендуется для DateTime значений для заметок в документах , и хотя K будет работать для DateTime.Now, оно не обязательно будет согласованным для других значений, поскольку зависит на имущество .Kind. Если вы должны использовать DateTime, используйте K вместо zzz, но внимательно проверьте .Kind.

...