c# - 托管后日期时间出错

标签 c# .net sql-server datetime

我在 MSSQL DB 中有一列存储了以下日期:

2016-06-10 10:55:00.000

我在前端使用 DataReader 调用此列,然后将其解析为特定格式,然后与其他日期进行比较以查找时间戳。 问题是当我从 Visual Studio 运行它时,它工作正常。但是当我将它上传到实时服务器时,出现以下异常:

6/10/2016 10:55:00 AM ::: d1 ::: :: System.FormatException: String was not recognized as a valid DateTime. at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) at login.btn_login_Click(Object sender, EventArgs e)

以下是我的代码:

tst = b.dr.GetValue(1).ToString() + " ::: d1 ::: ";
DateTime d1 = DateTime.ParseExact(b.dr.GetValue(1).ToString(), "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
tst = "d2";
DateTime d2 = DateTime.ParseExact(System.DateTime.Now.ToString(), "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
tst = "d3";
TimeSpan ts = d2.Subtract(d1);
tst = "d4";

我也试过:

DateTime d1 = DateTime.ParseExact(b.dr.GetValue(1).ToString(), "dd-MM-yyyy", null);

它仍然不能在实时服务器上运行。 还试过:

DateTime d1 = DateTime.ParseExact(b.dr.GetValue(1).ToString(), "dd-MM-yyyy HH:mm:ss", null);
DateTime d2 = DateTime.ParseExact(System.DateTime.Now.ToString(), "dd-MM-yyyy HH:mm:ss", null);

但这并不奇怪。 作为实时服务器,它需要完全独立于系统文化,并且应该按照客户在其操作系统中选择的所有日期时间格式工作。

注意:在开发端,我使用的是 MSSQL R2 2008 Express,而实时服务器使用的是 MSSQL 2012。

最佳答案

如果数据库中的日期是以日期格式存储的,那么你可以这样做:

DateTime d1 = b.dr.GetDateTime(1).Date;
DateTime d2 = System.DateTime.Today;
TimeSpan ts = d2.Subtract(d1);

编辑:

如果该字段以日期格式存储在数据库中,例如 date、datetime、datetime2、smalldatetime 等,SqlDataReader.GetDateTime() 方法将获取该值并将其转换为 .Net DateTime 值。当日期值表示为这些专门的日期数据类型时,它们通常更便于操作。

日期字符串的问题是有时它们可​​以有多种解释。但是,专门的日期格式中的每一种都有特定且定义明确的解释。但是,如果您尝试将日期/时间值与字符串表示形式相互转换,您可能会再次遇到格式问题。只要您能避免此类转换,无论服务器中的日期时间设置如何,一切都会很好。

如果数据库中的字段没有时间成分(如果数据库数据类型是DATE而不是DATETIME),可以省略第一行的.Date部分,如下:

DateTime d1 = b.dr.GetDateTime(1);
DateTime d2 = System.DateTime.Today;
TimeSpan ts = d2.Subtract(d1);

关于c# - 托管后日期时间出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40132884/

相关文章:

c# - 默认控制台窗口的文本颜色

c# - 在 ASP.net 中创建嵌入式图像按钮?

c# - 使用 Automapper 将集合的属性映射到基元数组

c# - 获取显示器的纵横比

.net - XmlDocument 不保存标签之间的空格

c# - 在 WP7 中设置所选 ListPicker 值的文本

c# - WCF 服务返回另一个服务(服务工厂?)

sql - 在sql server 2008中将一个表中的值插入到另一个表中,其中一个字段应该递增

sql-server - 对 xml 列执行 "insert only if node with specific value does not exist"的有效方法

php - “PDOException”消息“SQLSTATE[22001] : String data, 右截断:0