DateTime.ParseExact创建一个正确的Date对象,但Date设置错误

时间:2014-12-11 13:55:48

标签: c# date datetime

所以我从PostgreSQL数据库获得了这个日期字符串“2014-12-10T19:26:37.381467”。

我有一个功能让我们说

public static bool String2DatePG(string s, out DateTime dd)
{
    try
    {
        CultureInfo USCulture = new CultureInfo("en-us", false);
        var formatstring = "yyyy'-'MM'-'dd'T'HH':'mm':'ss";
        if (!String.IsNullOrEmpty(s))
        {
            var msc = s.Split('.');
            var mscc = msc.Count();
            if (mscc <= 0)
            {
                dd = DateTime.ParseExact(s, formatstring , USCulture);
                return true;
            }

            var fc = msc.Last();
            var fcc = fc.Count();                   

            if (fcc > 0)
            {
                var newformat = formatstring + '.';

                for (int i = 0; i < fcc; i++)
                {
                    newformat += 'f';
                }

                dd = DateTime.ParseExact(s, newformat, USCulture);
                return true;
            }
        }
    }
    catch (Exception)
    {
    }

    dd = DateTime.MinValue;
    return false;
}

它读取日期字符串,检查有多少毫秒数字,并根据它创建一个格式字符串。 我从DB得到的字符串看起来很好,但是当dd对象被设置为奇怪的东西时,如下图所示:

Inspection of DateTime object dd

我不知道这里出了什么问题,但是当我尝试再次保存值时,DB似乎将Date设置为与我在第一句中提到的日期完全不同,就像在图片中看到的那样日期对象,前面带有+号。 DateTime的所有其他对象似乎没问题,或者我在这里完全遗漏了什么?

1 个答案:

答案 0 :(得分:4)

您正在查看DateTime对象的Date属性。此属性中的时间被忽略,因此默认为12 a.m。

来自MSDN:

  

由于DateTime类型表示单个类型中的日期和时间,因此避免将Date属性返回的日期误解为日期和时间非常重要。

如果您要通过将dd.Date发送回数据库进行测试,请尝试仅保存dd