日期时间变量“抽搐”一小时

时间:2013-06-14 12:00:10

标签: c# sql debugging datetime

我的代码(或者更确切地说是其他人的代码)存在一个奇怪的问题。我正在调试并试图弄清楚为什么我们的时间显示错误。

无论如何,这是打印时间的代码:

                                              Wrong value gets returned   
                                                           v 
[...].text="updated: "+TimeZoneInfo.ConvertTimeFromUtc(OurClass.FetchTime("TableName"), siteTimeZone).ToLongTimeString(); 

这是被调用的方法:

SqlCommand cmd=getConnection();

cmd.CommandText="Procedure_to_fetch_time";
cmd.Parameters.AddWithValue("@table", tableName);

object o=cmd.ExecuteScalar();

closeConnection(cmd);

if(o==null) 
{
    return DateTime.MinValue;
}
return DateTime.Parse(o.ToString());
                      ^ here it's correct

我调试了它并检查了可能改变值的所有单个操作(所有转换和内容),当方法返回值时,它是正确的。但是当它到达时,1小时“已经过去”,现在时间错了......

任何人都知道这会导致什么?


修改:

回复评论:

  • TimeZoneInfo.ConvertTimeFromUtc发生之前更改了值。
  • 为什么反对?不知道,不是我的代码。
  • o.ToString()"1900-01-01 00:00:00"
  • DateTime.Parse也会返回"1900-01-01 00:00:00"
  • 数据库正在使用smalldatetime
  • 数据库与客户端位于同一时区。

1 个答案:

答案 0 :(得分:1)

DateTime对象具有Kind属性。此属性表示数据是应以UTC(DateTimeKind.Utc)还是以本地时区(DateTimeKind.Local)解释,还是以未知(DateTimeKind.Unspecified)解释。

您应该使用DateTimeParse参数的重载,并指定DateTimeStylesDateTimeStyles.AssumeUniversal