Во время кодирования сегодня я заметил кое-что странное с временными интервалами и строками форматирования.Я пытался напечатать временной интервал, например 01:03:37
как 1:03:37
(без начального 0 для часов).Поэтому я использовал формат строки h:mm:ss
.Это, однако, дало мне ведущий 0. Если я преобразовал TimeSpan в DateTime и сделал то же самое снова, строка форматирования h
сработала, как я ожидал.
Пример консольной программы:
class Program
{
static void Main(string[] args)
{
var time = new TimeSpan(01, 03, 37);
var culture = new CultureInfo("sv-SE");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
Console.WriteLine(time.ToString());
Console.WriteLine(string.Format(culture, "{0:h:mm:ss}", time));
Console.WriteLine(string.Format(culture, "{0:hh:mm:ss}", time));
Console.WriteLine((new DateTime(time.Ticks)).ToString("h:mm:ss", culture));
Console.WriteLine((new DateTime(time.Ticks)).ToString("hh:mm:ss", culture));
Console.ReadKey();
}
}
Вывод:
01:03:37
01:03:37 // <-- expected: 1:03:37
01:03:37
1:03:37
01:03:37
Почему TimeSpan и DateTime ведут себя по-разному?