日期时间字符串在多台计算机上不同

时间:2015-10-16 09:38:08

标签: c# sql

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

 Datetime? _startdate = DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null);

在我的机器上,时间显示为16-10-2015。应用程序运行没有问题。

但是在时间显示为10/16/2015的计算机上,应用程序返回错误:

  

字符串未被识别为有效的DateTime。

感谢您的时间

3 个答案:

答案 0 :(得分:4)

您在评论中表示reader["STARTDATE"]来自数据库中的日期时间列,在这种情况下,您不应该"解析"它根本就是一个日期时间

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

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

答案 1 :(得分:3)

假设reader是SqlDataReader而"STARTDATE"是数据库中(可空)DateTime字段的名称,reader["STARTDATE"]已经是DateTime对象。

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

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

简单

(DateTime?)reader["STARTDATE"]

编辑:

基于更多评论,问题现在终于变得清晰了:SQL查询中的STARTDATE字段不是DateTime,而是定义为CONVERT(nvarchar,GETDATE (),105)

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

  • 使用

    DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd-MM-yyyy", null)
    

    因为SQL的CONVERT格式105被定义为返回dd-MM-yyyy(请参阅MSDN)。

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

    DateTime.Now.Date
    

    代替。

答案 2 :(得分:0)

我应该将其转换为正确的格式:" dd-MM-yyyy"