Подтвердить что ты не робот

Преобразование строки во Время

У меня есть время, которое равно 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.

4b9b3361

Ответ 1

"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);

Или еще лучше (IMO) использовать "какой бы длинный шаблон времени для культуры":

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

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

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

Ответ 2

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

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

Ответ 3

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

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.