Я столкнулся с проблемой, которая сводит меня с ума. В моем приложении (ASP.NET MVC2 / .NET4) я просто запускаю это:
DateTime.Now.ToShortTimeString()
Все примеры, которые я видел, показывают, что я должен получить что-то вроде: 12:32 PM
, однако я получаю 12:32
без AM / PM.
Я запустил LinqPad 4, чтобы посмотреть, смогу ли я повторить это. Вместо этого он возвращает 12:32 вечера
правильно.
Какого черта?
Вы также можете попробовать настраиваемый формат , чтобы избежать путаницы, связанной с культурой:
DateTime.Now.ToString("hh:mm tt")
KBrimington выглядит правильным:
Строка, возвращаемая методом ToShortTimeString, зависит от языка и региональных параметров. Он отражает шаблон, определенный объектом DateTimeFormatInfo текущего языка и региональных параметров. Например, для языка и региональных параметров en-US стандартным коротким временным шаблоном является «h: mm tt»; для культуры de-DE это «ЧЧ: мм»; для культуры ja-JP это «Ч: мм». Конкретную строку формата на конкретном компьютере также можно настроить так, чтобы она отличалась от стандартной строки короткого формата времени.
Из MSDN
Если вы не хотите возиться с культурой для всего потока/приложения, попробуйте следующее:
CultureInfo ci = new CultureInfo("en-US");
string formatedDate = DateTime.Now.ToString("t", ci);
Вы можете найти список строк формата DateTime здесь.
Функция использует шаблоны пользователей по умолчанию. Их можно изменить в Панели управления. Проверьте первую вкладку в настройках «Регион и язык». Измените шаблон Кратковременного на шаблон, например, «ч: мм тт», и все готово.
Вы можете установить информацию о культуре потока, и затем она будет использоваться методом ToShortTimeString (). Но поймите, что это повлияет на весь код, работающий в этом потоке.
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
Да, это зависит от вашей локали. Какое значение имеет System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern
в вашем приложении?
Смотрите MSDN Link