Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 日期时间变量";tics“;一小时_C#_Sql_Debugging_Datetime - Fatal编程技术网

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将考虑主机运行的时区。您是否检查了机器时区以及可能影响它的夏令时?您的数据库是否与客户端应用程序位于不同的时区?您在数据库中使用什么数据类型来存储日期和时间?