C# datetime字符串在多台计算机上不同

C# datetime字符串在多台计算机上不同,c#,sql,C#,Sql,也许有人能帮我解决以下问题: Datetime? _startdate = DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null); 在我的机器上,时间显示为16-10-2015。应用程序运行没有问题 但在时间显示为2015年10月16日的机器上,应用程序返回错误: 字符串未被识别为有效的日期时间 感谢您抽出时间您在评论中指出,阅读器[“STARTDATE”]来自数据库中的datetime列,在这种情况下

也许有人能帮我解决以下问题:

 Datetime? _startdate = DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null);
在我的机器上,时间显示为16-10-2015。应用程序运行没有问题

但在时间显示为2015年10月16日的机器上,应用程序返回错误:

字符串未被识别为有效的日期时间


感谢您抽出时间

您在评论中指出,
阅读器[“STARTDATE”]
来自数据库中的datetime列,在这种情况下,您根本不应该“解析”它,它已经是datetime

 Datetime? _startdate = (DateTime?)reader["STARTDATE"];

您在数据库中看到的并不是它所采用的“格式”——它只是您的数据库选择向您显示它的格式——可能基于您自己的计算机(或数据库服务器)的区域设置。

假设
reader
是SqlDataReader,而
“STARTDATE”
是a的名称(可为空)数据库中的DateTime字段,
读卡器[“STARTDATE”]
已经是DateTime对象

这意味着您可以替换问题中的代码

DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null)
简单地说

(DateTime?)reader["STARTDATE"]
编辑:

根据更多的注释,现在问题终于清楚了:SQL查询中的STARTDATE字段不是日期时间,而是定义为
CONVERT(nvarchar,GETDATE(),105)

因此,由于SQL查询无法更改,因此解决方案是

  • 任用

    DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd-MM-yyyy", null)
    
    因为SQL的转换格式
    105
    定义为返回
    dd-MM-yyyy
    (请参阅)

  • 或者,由于SQL
    GetDate()
    是当前日期和时间,只需丢弃此结果并使用

    DateTime.Now.Date
    
    相反


我应该把它转换成正确的格式:“dd-MM-yyyy”

你有没有尝试过
DateTime.ParseExact(reader[“STARTDATE”].ToString(“dd/MM/yyyyy”),“dd/MM/yyyy”,null)
是的,这不起作用:“方法ToString没有重载…”@user3114347等等,
reader[“STARTDATE”到底是什么?
?这不是约会时间吗?如果是这样,您只需直接使用它(与cast一起使用,如
(DateTime)reader[“STARTDATE”]
),而不必先将其字符串化,然后再对其进行精确解析。是的,它是表中的DateTime列。格式是这样的:Date={16-10-2015 0:00:00}@MrLister-s'ok-总是发生:)我的错,startdate在sqslquery中是这样的:startdate=CONVERT(nvarchar,GETDATE(),105)@user3114347-然后不要这样做!使其成为
STARTDATE=GetDate()
-不要将日期时间转换为字符串我应该更改它,但我无权更改查询。STARTDATE列中的输出现在为:16-10-2015。解决方法的建议?是的,您试图将其解析为
dd/mm/yyyy
——但它不是那种格式。将它解析为
dd-mm-yyyy
,它就可以工作了。