所以我从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对象被设置为奇怪的东西时,如下图所示:
我不知道这里出了什么问题,但是当我尝试再次保存值时,DB似乎将Date设置为与我在第一句中提到的日期完全不同,就像在图片中看到的那样日期对象,前面带有+号。 DateTime的所有其他对象似乎没问题,或者我在这里完全遗漏了什么?
答案 0 :(得分:4)
您正在查看DateTime对象的Date属性。此属性中的时间被忽略,因此默认为12 a.m。
来自MSDN:
由于DateTime类型表示单个类型中的日期和时间,因此避免将Date属性返回的日期误解为日期和时间非常重要。
如果您要通过将dd.Date
发送回数据库进行测试,请尝试仅保存dd
。