我在asp.net/c#
上写了一个相当大的webapp,MSSQL 2008 r2
为这个数据库提供服务。该程序需要将date/time
字符串(采用ISO日期格式)转换为DateTime
,在此处使用它们并稍后存储为smalldatetime
,sql
。转换为和从日期时间添加一小时?
当字符串转换为datetimes
时,神秘地将hour
添加到结果中。据我所知,在英国,我们受夏令时(目前活跃),但datetime
.convert方法明白这一点?当转换回字符串时,结果如预期。
我已经写了一个小程序来说明这个问题(也包括我的理智非ISO日期):
class Program
{
static void Main(string[] args)
{
//BB();
//Dist();
DateTime d1 = new DateTime();
DateTime d2 = new DateTime();
string d1s = "2010-09-13T09:30:01Z";
string d2s = "2010-09-13 09:30:01";
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("d1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
d1s = d1.ToString("u"); d2s = d2.ToString("u");
Console.WriteLine("\nd1: {0}", d1s);
Console.WriteLine("d2: {0}", d2s);
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("\nd1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
Console.Read();
}
}
下面是结果我得到当我运行该程序:
d1s:2010-09-13T09:30:01Z d1:13/09/2010 10:30:01
d2s:2010-09-13 09:30:01 d2:13/09/2010 09:30:01
d1: 2010-09-13 10:30:01Z
d2: 2010-09-13 09:30:01Z
d1s:2010-09-13 10:30:01Z d1:13/09/2010 11:30:01
d2s:2010-09-13 09:30:01Z d2:13/09/2010 10:30:01
Done
这是正确的行为吗?我是个白痴吗?我会期望将日期时间转换为字符串,然后确切的字符串回到日期时间将返回原始输入。如果这是正确的行为,关于如何获得一致结果但仍使用Convert.ToDateTime()
的任何想法?
很多谢谢。
啊,所以放下“Z”将会解决问题。我不得不做一些字符串replcing,因为这是我得到它的格式。(编辑 - 是的,似乎解决它。谢谢) – 2010-09-13 11:59:24