Разное поведение между строками форматирования для TimeSpan и DateTime - PullRequest
1 голос
/ 03 августа 2010

Во время кодирования сегодня я заметил кое-что странное с временными интервалами и строками форматирования.Я пытался напечатать временной интервал, например 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 ведут себя по-разному?

Ответы [ 3 ]

7 голосов
/ 03 августа 2010

Поскольку строка форматирования не работает для TimeSpan и TimeSpan.ToString() всегда возвращает ( из MSDN ):

Строка, представляющая значение этот экземпляр. Возвращаемое значение форма:

[-] [D]. Чч: мм: сс [Л']

6 голосов
/ 03 августа 2010

До .Net 4.0, TimeSpans не поддерживают строки формата.

В .Net 4.0 строки формата задокументированы .

0 голосов
/ 03 августа 2010
...