C # TypeConverter подавляет (милли) секунды при преобразовании DateTime - PullRequest
1 голос
/ 14 ноября 2010

Я использую TypeConverter для преобразования DateTime экземпляров в и из строк.

При использовании зависимых от культуры функций ConvertTo/FromString кажется, что секунды и миллисекунды DateTime не 't конвертируется.

При использовании функций, инвариантных к культуре ConvertTo/FromInvariantString, миллисекунды по-прежнему отсутствуют.В любом случае, два DateTime экземпляра до и после преобразования никогда не равны, как я бы ожидал.

Этот класс демонстрирует эффект:

using System;
using System.ComponentModel;

public class DateToStringConversionTest 
{
    public static void Main()
    {
        TypeConverter tc = TypeDescriptor.GetConverter(typeof(DateTime));
        DateTime d1 = new DateTime( 2010, 1, 2, 3, 4, 5, 6 );

        // convert to / from invariant string
        string   s3 = tc.ConvertToInvariantString(d1);
        DateTime d3 = (DateTime) tc.ConvertFromInvariantString(s3);
        Console.WriteLine( "invariant string\n   {0}\n=> {1}\n=> {2}\n=> equals? {3}", 
              d1, s3, d3, d1.Equals(d3) );

        // convert to / from string
        string   s2 = tc.ConvertToString(d1);
        DateTime d2 = (DateTime) tc.ConvertFromString(s2);
        Console.WriteLine( "\nstring\n   {0}\n=> {1}\n=> {2}\n=> equals? {3}", 
              d1, s2, d2, d1.Equals(d2) );
    }
}

Это вывод:

string
02.01.2010 03:04:05 => 02.01.2010 03:04 => 02.01.2010 03:04:00 => equals? False
invariant string
02.01.2010 03:04:05 => 01/02/2010 03:04:05 => 02.01.2010 03:04:05 => equals? False

Я работаю в немецкой локали, поэтому даты выводятся какDD.MM.YYYY.

1 Ответ

0 голосов
/ 14 ноября 2010

Я обычно использую DateTime.Parse/TryParse и DateTime.ToString(), которые не обрезают миллисекунды. Я не вижу причины, по которой это не сработает и для вас.

...