C# 从gridview中的字符串转换日期和/或时间时,转换失败

C# 从gridview中的字符串转换日期和/或时间时,转换失败,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,在我的GridView中,我可以看到我的日期列通常为mm/dd/yy,但当我选择一条记录并分配一个字符串时,就像这样 GridViewRow row = GridView1.SelectedRow; string sdate= row.Cells[2].Text; //Date is in Column 2 当我输出这个sdate字符串时,它返回:1368309600000 如果我试图转换它,它不起作用,我试图从SQL数据库中选择一些东西,我得到了这个错误 从字符串转换日期和/或时间时转换失败

在我的GridView中,我可以看到我的日期列通常为mm/dd/yy,但当我选择一条记录并分配一个字符串时,就像这样

GridViewRow row = GridView1.SelectedRow;
string sdate= row.Cells[2].Text; //Date is in Column 2
当我输出这个sdate字符串时,它返回:1368309600000

如果我试图转换它,它不起作用,我试图从SQL数据库中选择一些东西,我得到了这个错误

从字符串转换日期和/或时间时转换失败

编辑:SQL语句中用于转换的部分是:

convert(datetime, '" + sdate +"', 101"+")

我怀疑问题出在sdate本身,但我不确定您的日期字符串是否表示为自1970年1月1日00:00:00 GMT以来的毫秒数。T-SQL转换函数不支持此格式。所以,你可以像这样转换成C日期时间

DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
                   .AddMilliseconds(Convert.ToDouble(sdate));
"convert(datetime, '" + date.ToLocalTime().ToString("MM/dd/yyyy") + "', 101)"
1368309600000转换为11/05/2013 22:00:00Z这是UTC

然后根据本地时间进行调整,并重新格式化SQL字符串的日期,如下所示

DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
                   .AddMilliseconds(Convert.ToDouble(sdate));
"convert(datetime, '" + date.ToLocalTime().ToString("MM/dd/yyyy") + "', 101)"
这里的重要部分是103,它用于格式dd-mm-yyyy 查看您的本地格式。
这个问题只会出现在美国以外的人身上。

请向我们展示您转换代码的地方。可能有很多事情,我经常在从测试环境切换到生产环境时看到这一点,系统时间/日期格式不同。节俭法则要求问一个显而易见的问题:你确定你的索引中没有一个错误,即2意味着第二列,对于零基索引,哪个应该是1?此外,如果可能的话,请尝试按日期列的列名为其编制索引,以确保指定的值来自所需的列。我确定,因为我选择了单元格[1],它将返回正确的列。如果尝试,它将返回正确的列:字符串值=GridView1。行[0]。单元格[1]。文本;不幸的是,这是一个大纪元。根据www.unixtimestamp.com,它应该是2013年12月5日,转换正确,我猜是因为时区。@user2321895,啊,是的,当然。我的回答中增加了一个ToLocalTime的电话。当他的日期是mm/dd/yy格式时,103如何帮助他?顺便说一句,你是说美国吗?