C# c中从字符串到日期时间的日期解析#
我正在将日期值(“2016年11月24日”)从excel文件导出到C#NET中的SQL数据库表。我在函数中使用以下代码来解析从字符串到日期时间的日期值。但它不起作用。我试图调试它,但当它出现在那一行,它的终止。谁都知道问题出在哪里C# c中从字符串到日期时间的日期解析#,c#,sql-server,datetime,C#,Sql Server,Datetime,我正在将日期值(“2016年11月24日”)从excel文件导出到C#NET中的SQL数据库表。我在函数中使用以下代码来解析从字符串到日期时间的日期值。但它不起作用。我试图调试它,但当它出现在那一行,它的终止。谁都知道问题出在哪里 var date = row["Date"].ToString(); DateTime dates; string format = "MM-dd-yyyy"; if (!DateTime.TryParseExact(date, format, Cultu
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
}
您的格式应该是
dd-MM-yyyy
因为您的日期是2016年11月24日
as-date,您可以在这篇MSDN文章中了解有关字符串格式的更多信息
改变
到
根据OP的注释编辑-在SQL server中存储格式化日期
DateTime以标准格式存储在SQL server中,该格式实际上不是我们看到的“dd-MM-yyy”格式。本文解释了内部SQLServer格式
摘自
那么SQLServer如何在内部存储日期呢?它使用8个字节来
存储日期时间值,第一个4表示日期,第二个4表示日期
时间。SQL Server可以将这两组4字节解释为整数。
对于日期部分,SQL Server存储的值是
基准日期1900年1月1日之前或之后的天。因此
存储协议,SQL Server假定日期为1900年1月1日
我在第一个例子中没有提供日期。SQL Server内部
存储的值为0。负数表示早于的日期
1900年1月1日
SQL Server将该时间的第二个整数存储为
午夜过后时钟滴答作响。一秒钟包含300个刻度,所以一个刻度
等于3.3毫秒(ms)。您可以查看天和的值
通过将日期时间值转换为二进制(8)值和
使用substring函数提取每组4个字节。代码
在图3中,将每组4个字节转换为一个整数
最后,我使用了以下代码: 字符串格式=“日/月/年” 如果(!DateTime.TryParseExact(日期、格式、CultureInfo.InvariantCulture、DateTimeStyles.None、过期)) {继续;} 否则 {dates=DateTime.ParseExact(日期、格式、CultureInfo.InvariantCulture);} 字符串datetime=dates.ToString(“yyyy-MM-dd”)
感谢大家。感谢投票人:看一看建议的代码,问题中的代码是相同的,应该是
string format=“dd-MM-yyyy”
,@Adil:现在编辑后就完美了。。谢谢你纠正我的格式。但问题在于将字符串值解析为Datetime。为什么不转换为日期时间。我将日期值存储到excel文件中,如“24/11/2016”,我必须将其存储到sql数据库表中,如“2016-11-24”。@un lucky,我已经建议dd MM yyyy,您所指的语句不建议更正,尽管它看起来像。不管怎样,谢谢你让我澄清了这个模棱两可的问题!SQL server的日期存储与您正在尝试的表示格式无关,即dd-MM-yyyy,请参阅本文,了解datetime的内部格式。你可以先格式化它,然后再在GUI上演示。我很好奇为什么有两个解析命令?如果TryParse失败了,你认为解析为什么会成功?谢谢你纠正我。但实际问题在于将字符串值解析为Datetime。
string format = "MM-dd-yyyy";
string format = "dd-MM-yyyy";