Форматирование DateTime: Почему ToShortTimeString и "{0: t}" не отображают одно и то же? - PullRequest
3 голосов
/ 31 мая 2011
var todayAt2PM = new DateTime(
    DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 14, 0, 0);
Debug.Print("{0:t}", todayAt2PM);
Debug.Print("{0}", todayAt2PM.ToString("t"));
Debug.Print("{0}", todayAt2PM.ToShortTimeString());

Когда я запускаю это в C #, я получаю:

14: 00
14:00
14:00

CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture оба установлены на "en-US" на моем ПК.Я не делал никаких настроек для моих региональных настроек;когда я перехожу к этой части панели управления, все указывает на 12-часовое время с AM и PM.

Так почему же "{0: t}" печатает с использованием 24-часового времени?

1 Ответ

6 голосов
/ 31 мая 2011

Мне кажется, проблема в Debug.Print, а не в спецификаторе формата t.Если вы используете Console.WriteLine вместо Debug.Print, это дает ожидаемый результат.

РЕДАКТИРОВАТЬ: только что посмотрел с помощью Reflector ... Debug.Print всегда использует инвариантную культуру, а не текущую культуру, иформат времени в этой культуре 24-часовой

[Conditional("DEBUG")]
public static void Print(string format, params object[] args)
{
    TraceInternal.WriteLine(string.Format(CultureInfo.InvariantCulture, format, args));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...