Как преобразовать строку в DateTime со смещением [duplicate]

Выбросить исключение.

  if (fileName.IndexOfAny (Path.GetInvalidFileNameChars ()) & gt; -1) {throw new ArgumentException ();  }  
0
задан Picrofo Software 7 November 2012 в 15:09
поделиться

5 ответов

DateTimeOffset также обрабатывает смещение часового пояса:

DateTimeOffset.Parse("2007-08-31T06:59:40+02:00")

или

DateTimeOffset.ParseExact("2007-08-31T06:59:40+02:00", "yyyy-MM-ddTHH:mm:sszzzz"
                          ,System.Globalization.CultureInfo.InvariantCulture));
3
ответ дан Rik 16 August 2018 в 05:43
поделиться

Вы можете использовать метод DateTimeOffset.TryParse.

http://msdn.microsoft.com/en-us/library/bb397029.aspx

2
ответ дан Ant 16 August 2018 в 05:43
поделиться

Используйте DateTime.Parse():

DateTime dt = DateTime.Parse ("2007-08-31T06:59:40+02:00")
4
ответ дан Joe Albahari 16 August 2018 в 05:43
поделиться
  • 1
    Хотя OP может захотеть использовать DateTimeOffset для сохранения смещения. – Oded 7 November 2012 в 15:12
  • 2
    Не работает, преобразует его в неправильную дату. – user1806206 7 November 2012 в 15:13
  • 3
    Какая «неправильная дата»? Предоставление деталей помогает быстрее найти ответ. – Henk Holterman 7 November 2012 в 15:18
  • 4
    Имейте в виду, что DateTime сообщит вам время в локальном часовом поясе (или UTC, если вы запрашиваете), тогда как указанная строка находится в часовом поясе +2: 00. Таким образом, произойдет конверсия. – Joe Albahari 7 November 2012 в 15:19

Вы должны использовать DateTimeOffset.ParseExact - вы знаете формат точный , который вы ожидаете, и поскольку это предположительно пришло с другого компьютера, а не на вход пользователя, это определенная ошибка , если она терпит неудачу. Аналогично вам следует указать инвариантную культуру, чтобы указать, что это не зависит от «текущей культуры» исполняемого потока.

var value = DateTimeOffset.ParseExact(text,
                                      "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz",
                                      CultureInfo.InvariantCulture);

DateTimeOffset - это тип, который точно представляет информацию - DateTime имел бы , чтобы потерять часть этой информации.

6
ответ дан Jon Skeet 16 August 2018 в 05:43
поделиться

Используйте DateTimeOffset.Parse().

Затем используйте свойство DateTime или свойство DateTimeUtc, чтобы получить DateTime (но вы должны выяснить, можете ли вы использовать DateTimeOffset.

1
ответ дан Knaģis 16 August 2018 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: