Как вы форматируете и передаете дату для лучшей совместимости совместимости? - PullRequest
0 голосов
/ 10 марта 2011

В нашей производственной среде из 12 серверов у нас есть проблема с кодом

var date = DateTime.Parse("Thu, 10 Mar 2011 13:15:33 GMT");

и это не всегда, и только на нескольких серверах (возможно, один раз в месяц) будет выбрасываться

System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String, DateTimeFormatInfo, DateTimeStyles)

Дата «Чт, 10 марта 2011 13:15:33 GMT» является реальным примером для сегодняшнего дня. Она происходит из другой среды и создается следующим образом

string.Format("{0:R}", ExpiresOn.ToUniversalTime())

Второй день мы подключаем серверы обратно к ферме, и они продолжают работать нормально.

  • Есть ли способ избежать этого?
  • Поскольку эта информация непрозрачна для потребителей, мы думаем, что переход на тики лучше?
  • Есть ли хорошие практики?

Спасибо

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Всегда используйте CultureInfo.InvariantCulture. Это правило. Используйте его для разбора дат, чисел (особенно с плавающей запятой / двойных / десятичных дробей), для дат ToString (ing), чисел (особенно с плавающей запятой / двойных / десятичных дробей) и т. Д. И если вы обрабатываете дату, всегда думайте, будет ли лучше обрабатывать их в UTC или в вашем местном часовом поясе. Если вам необходимо обеспечить координацию между серверами / лицами в нескольких часовых поясах, всегда используйте (сохраняйте) даты UTC.

0 голосов
/ 11 марта 2011

Это то, что я придумал в соответствии с предыдущим ответом

var original = DateTime.Now;
var stringified = original.ToString("r",CultureInfo.InvariantCulture);

и на стороне потребителя / сервер

var restored = DateTime.ParseExact(stringified, "r", CultureInfo.InvariantCulture);

Мы провели некоторое тестирование, и пока оно выглядит хорошо.Если вы чувствуете, что я неправ, или это можно сделать проще, дайте мне знать, спасибо.

...