【问题标题】:Date parsing from string to DateTime in c#c#中从字符串到DateTime的日期解析
【发布时间】:2017-03-09 05:51:06
【问题描述】:

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

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
}

【问题讨论】:

  • 我很好奇为什么有2个解析命令?如果 TryParse 失败,为什么你认为 Parse 会成功?
  • 感谢您的指正。但实际问题在于将字符串值解析为日期时间。

标签: c# sql-server datetime


【解决方案1】:

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

改变

string format = "MM-dd-yyyy";

string format = "dd-MM-yyyy";

编辑基于 OP 的 cmets - 在 SQL 服务器中存储格式化日期

日期时间以标准格式存储在 SQL 服务器中,实际上并不是我们看到的“dd-MM-yyy”之类的表示格式。这篇Solving the Datetime Mystery的文章解释了内部SQL server的格式。

摘自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。负数表示日期早于 1900 年 1 月 1 日。

SQL Server 将时间的第二个整数存储为 午夜过后的时钟滴答作响。一秒包含 300 个滴答声,所以一个滴答声 等于 3.3 毫秒 (ms)。您可以查看天数和 通过将 datetime 值转换为 binary(8) 值和 使用 substring 函数提取每组 4 个字节。编码 然后将图 3 中的每组 4 个字节转换为整数。

【讨论】:

  • 感谢支持者:看看建议的代码和问题中的代码是一样的,应该是string format = "dd-MM-yyyy",@Adil:现在编辑后很完美..lol
  • 感谢您纠正我有关该格式的问题。但问题在于将字符串值解析为日期时间。为什么它不转换为日期时间。我将日期值保存到 Excel 文件中,例如“24/11/2016”,我必须将其存储到 sql 数据库表中,例如“2016-11-24”。
  • @un-lucky,我已经建议 dd-MM-yyyy,您指出的声明虽然看起来像,但并未建议作为更正。无论如何,感谢您让我消除歧义!
  • SQL 服务器存储日期与您尝试的演示格式无关,即 dd-MM-yyyy,请参阅这篇文章,stackoverflow.com/questions/1143259/… 关于日期时间的内部格式。例如,在 GUI 上演示之前,您始终可以对其进行格式化。
【解决方案2】:

最后我用下面的代码做到了:

字符串格式 = "dd/MM/yy";

if (!DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None,out dates))

{ 继续; }

其他

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

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

谢谢大家。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多