我的代码(或者更确切地说是其他人的代码)存在一个奇怪的问题。我正在调试并试图弄清楚为什么我们的时间显示错误。
无论如何,这是打印时间的代码:
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
。 答案 0 :(得分:1)
DateTime
对象具有Kind
属性。此属性表示数据是应以UTC(DateTimeKind.Utc
)还是以本地时区(DateTimeKind.Local
)解释,还是以未知(DateTimeKind.Unspecified
)解释。
您应该使用DateTimeParse
参数的重载,并指定DateTimeStyles
或DateTimeStyles.AssumeUniversal
。