从字符串解析日期时间到c#

问题描述:

我正在将excel文件中的日期值(“24/11/2016”)导出到C#.NET中的SQL数据库表中。我正在使用下面的代码到我的函数来解析日期值从字符串到日期时间。但它不起作用。我试图调试它,但是当它出现在那一行时,它终止了。任何人都知道什么是问题。从字符串解析日期时间到c#

var date = row["Date"].ToString(); 

DateTime dates;  
string format = "MM-dd-yyyy"; 

if (!DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dates)) 
{ 
    continue; 
}       
else 
{ 
    dates = DateTime.Parse(date); //terminating at this line 
} 
+1

我很好奇为什么有2个解析命令?如果TryParse失败,为什么你认为Parse会成功? – dana

+0

感谢您纠正我。但实际的问题是将字符串值解析到Datetime中。 –

你的格式应该是dd-MM-yyyy你有24/11/2016日期,你可以在这个MSDN文章中了解更多关于字符串格式Custom Date and Time Format Strings

变化

string format = "MM-dd-yyyy"; 

string format = "dd-MM-yyyy"; 

编辑基于由OP评论 - 存储在SQL服务器

日期时间存储在标准格式的SQL服务器格式化的日期,是不是在事实上呈现的格式,我们看到像“DD-MM-YYY ”。本文Solving the Datetime Mystery解释了内部SQL服务器格式。

Solving the Datetime Mystery

摘录那么,如何SQL Server在内部存储日期?它使用8个字节到 存储日期时间值 - 日期的前4个和时间的第二个4。 SQL Server可以将两个4字节的集合解释为整数。 对于日期部分,SQL Server存储的值是在基准日期1900年1月1日之前或之后的天数 。由于此存储协议为 ,SQL Server假定1900年1月1日的日期为 在我的第一个例子中没有提供日期。 SQL Server内部 存储值0。负数表示较早的日期比 1月1日,1900年

SQL服务器存储用于时间 时钟的数目的第二整数午夜后蜱。第二个包含300个滴答,所以标记 等于3.3毫秒(ms)。通过将日期时间值转换为二进制(8)值和 ,可以使用子字符串函数来提取每个4字节的集合,从而可以看到天和 时钟滴答的值。图3中的代码 然后将每组4个字节转换为整数。

+0

upvoters赞赏:看看建议的代码和代码在问题上是一样的,那应该是'string format =“dd-MM-yyyy”',@Adil:现在编辑完成后就完美了..大声笑 –

+0

感谢纠正我的格式。但问题在于将字符串值解析到Datetime中。为什么它不转换成日期时间。我有日期值到像“24/11/2016”Excel文件,我必须将它存储到像“2016-11-24”的SQL数据库表。 –

+0

@不幸运,我已经建议dd-MM-yyyy,虽然它看起来像,但你指出的陈述并没有被建议为修正。无论如何感谢让我澄清了歧义! – Adil

最后我做到了使用以下代码:

字符串格式= “DD/MM/YY”;

如果(DateTime.TryParseExact(日期,格式,CultureInfo.InvariantCulture,DateTimeStyles.None,淘汰日期)!)

{继续; }

别的

{日期= DateTime.ParseExact(日期,格式,的CultureInfo。InvariantCulture的); }

String datetime = dates.ToString(“yyyy-MM-dd”);

感谢所有。