也许有人可以帮我解决以下问题:
Datetime? _startdate = DateTime.ParseExact(reader["STARTDATE"].ToString(), "dd/MM/yyyy", null);
在我的机器上,时间显示为16-10-2015。应用程序运行没有问题。
但是在时间显示为10/16/2015的计算机上,应用程序返回错误:
字符串未被识别为有效的DateTime。
感谢您的时间
答案 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"