2013-09-20 7 views
23

У меня есть время, которое равно 16:23:01. Я пробовал использовать DateTime.ParseExact, но он не работает.Преобразование строки во Время

Вот мой код:

string Time = "16:23:01"; 
DateTime date = DateTime.ParseExact(Time, "hh:mm:ss tt", System.Globalization.CultureInfo.CurrentCulture); 

lblClock.Text = date.ToString(); 

Я хочу, чтобы показать на этикетке, как 04:23:01 PM.

ответ

53

"16:23:01" не соответствует шаблону "hh: mm: ss tt" - у него нет указателя am/pm, а 16 явно не в 12-часовом такте , Вы указываете этот формат в разделе парсинга, поэтому вам нужно соответствовать формату существующих данных. Вы хотите:

DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss", 
             CultureInfo.InvariantCulture); 

(Обратите внимание на инвариантную культуру, не текущей культуры - предполагается, что ваш вход действительно всегда использует двоеточие.)

Если вы хотите формат это hh:mm:ss tt, то вам нужно поставить эту часть в ToString вызова:

lblClock.Text = date.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture); 

Или еще лучше (ИМО) использовать «любой длинный образец время для культуры»:

lblClock.Text = date.ToString("T", CultureInfo.CurrentCulture); 

Также обратите внимание, что hh необычен; как правило, вы не хочет 0-левую колодку числа для чисел меньше 10.

(Также рекомендуется использовать мой Noda Time API, который имеет LocalTime типа - более подходящий матч за просто «время день»)

+0

Спасибо, что отлично поработал! – Apollo

+0

Да, да. благодаря – Apollo

7
string Time = "16:23:01"; 
DateTime date = DateTime.Parse(Time, System.Globalization.CultureInfo.CurrentCulture); 

string t = date.ToString("HH:mm:ss tt"); 
2

Это дает необходимые результаты:.

string time = "16:23:01"; 
var result = Convert.ToDateTime(time); 
string test = result.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture); 
//This gives you "04:23:01 PM" string 

Вы также можете использовать CultureInfo.CreateSpecificCulture("en-US") не все культуры будут отображаться AM/PM.

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