Я знаю, что это старый вопрос, но я столкнулся с подобной ситуацией и хотел поделиться тем, что нашел для будущих поисковиков, возможно, в том числе и для себя:).
DateTime.Parse()
может быть сложным - см. здесь , например.
Если DateTime
исходит от веб-службы или другого источника с известным форматом, вы можете рассмотреть что-то вроде
DateTime.ParseExact(dateString,
"MM/dd/yyyy HH:mm:ss",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal)
или, что еще лучше,
DateTime.TryParseExact(...)
Флаг AssumeUniversal
сообщает анализатору, что дата / время уже UTC; комбинация AssumeUniversal
и AdjustToUniversal
говорит ему не преобразовывать результат в «местное» время, что он попытается сделать по умолчанию. (В любом случае я лично стараюсь иметь дело исключительно с UTC на бизнес-уровне / уровне приложений / сервисов. Но обход конверсии в местное время также ускоряет процесс - на 50% и более в моих тестах, см. Ниже.)
Вот что мы делали раньше:
DateTime.Parse(dateString, new CultureInfo("en-US"))
Мы профилировали приложение и обнаружили, что DateTime.Parse представляет значительный процент использования процессора. (Между прочим, конструктор CultureInfo
был , а не значительным вкладчиком в использование ЦП.)
Поэтому я настроил консольное приложение для разбора строки даты / времени 10000 раз различными способами. Итог:
Parse()
10 сек
ParseExact()
(преобразование в местное) 20-45 мс
ParseExact()
(без преобразования в локальное) 10-15 мс
... и да, результаты для Parse()
находятся в секундах , тогда как остальные в миллисекундах .