#c# #datetime
#c# #datetime
Вопрос:
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.
DateTime.Today.AddHours(14)
2. @SLaks: Что этот комментарий должен нам сказать?
3. @Daniel: Это гораздо более короткая версия его второй строки
4. @SLaks: Да, вы правы. В следующий раз, пожалуйста, добавьте хотя бы небольшую подсказку в свой код 😉
Ответ №1:
Я думаю, проблема в 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));
}