C# 日期时间变量";tics“;一小时
我的代码(或者更确切地说,是别人的代码)有一个奇怪的问题。我正在调试并试图找出为什么我们的时间显示错误 无论如何,这是打印时间的代码:C# 日期时间变量";tics“;一小时,c#,sql,debugging,datetime,C#,Sql,Debugging,Datetime,我的代码(或者更确切地说,是别人的代码)有一个奇怪的问题。我正在调试并试图找出为什么我们的时间显示错误 无论如何,这是打印时间的代码: Wrong value gets returned v [...].text="updated: "+TimeZoneInfo.ConvertTi
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
- 数据库位于客户端的同一时区李>
DateTime
对象有一个Kind
属性。此属性表示数据应以UTC(DateTimeKind.UTC
)或本地时区(DateTimeKind.local
)解释,还是未知(DateTimeKind.Unspecified
)
您应该使用
DateTimeParse
重载,该重载接受datetimestyle
参数,并指定datetimestyle.AssumeUniversal
或datetimestyle.AssumeLocal
为什么要直接使用对象而不是DateTime
?o.ToString()的值是多少?对该字符串进行DateTime.Parse
的结果是什么?您确定不是TimeZoneInfo.ConvertTimeFromUtc
增加了一个小时吗?夏令时将是我最初的猜测TimeZoneInfo.ConvertTimeFromUtc将考虑主机运行的时区。您是否检查了机器时区以及可能影响它的夏令时?您的数据库是否与客户端应用程序位于不同的时区?您在数据库中使用什么数据类型来存储日期和时间?