2013-07-25 4 views
2

у меня есть строка, которая содержит время даты этого ...Как разобрать строку в формат времени даты в C#

string S="08/18/2013 24:00:00" 
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy HH:mm:ss", null); 

я хочу, чтобы разобрать его на время даты, но показывает исключение, как это. DateTime, представленный строкой, не поддерживается в календаре System.Globalization.GregorianCalendar.

, пожалуйста, сообщите мне какое-либо решение этой проблемы.

+1

Просто мысль, что нет времени 24:00:00. Не знаю, если это ваша проблема. – ckv

+1

@ckv: Есть в ISO-8601. Это «конец дня» в основном. –

+0

@JonSkeet Спасибо за этот интересный факт. – ckv

ответ

10

Проблема с час быть 24. DateTime не поддерживает это, насколько я знаю.

Варианты:

  • Используйте свой Noda Time проект, который does support 24:00:00, но в основном обрабатывает его, добавляя в день (не сохраняет разницу между этим и «конец предыдущего дня»)
  • Keep, используя DateTime вручную заменить «24:00:00» с «00:00:00», когда это происходит, и не забудьте добавить день после этого

Если вы хотите сохранить информацию о том, что было на самом деле «конец день "вам понадобится сделать это отдельно и сохранить информацию рядом с DateTime/LocalDateTime.

Вы должны также синтаксический анализ с инвариантной культурой, как предлагали другие ответы - вы не пытаетесь проанализировать специфическую для культуры строку; вы знаете точные сепараторы и т.д.

+0

Nice catch, я не заметил 24 :) –

+0

да это работает .... – Deeapk

1
string S="08/18/2013 00:00:00"; // here is the first problem occurred 
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture); 
0

От The "HH" Custom Format Specifier

«HH» пользовательских спецификатор формата (плюс любое количество дополнительных «H» спецификаторов) представляет час в виде числа от через ; что есть, час представлен круглосуточным 24-часовым тактом, который считается часов с полуночи.

Таким образом, используя 24, как час недействителен на этом случае.

Попробуйте с hh формат с 00 вместо этого;

string S = "08/18/2013 00:00:00"; 
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture); 

Здесь a DEMO.

Если вы действительно хотите использовать 24:00:00 в качестве часа, посмотрите Noda Time, который был разработан Jon.

Смежные вопросы