2

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

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

                                              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.
  • 数据库位于客户端的同一时区。
4

1 回答 1

1

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

DateTimeParse您应该使用带有参数的重载DateTimeStyles,并指定 DateTimeStyles.AssumeUniversalor DateTimeStyles.AssumeLocal

于 2013-06-14T17:27:35.900 回答