【问题标题】:encountering String was not recognized as valid datetime using ParseExact遇到字符串未被识别为使用 ParseExact 的有效日期时间
【发布时间】:2019-10-30 20:39:47
【问题描述】:

我想将 DateTime.Now 插入为 dd-MMM-yyyy 格式,但是当我使用 ParseExact 时,它给了我字符串未被识别为有效日期时间。

db.AddInParameter(objdbCommand, "@dtAddedOn", DbType.DateTime, DateTime.ParseExact(Convert.ToString(DateTime.Now), @"dd-MMM-yyyy", System.Globalization.CultureInfo.InvariantCulture));

我也试过了:

DateTime.ParseExact(Convert.ToString(DateTime.Now), @"dd-MMM-yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture));

但它给了我同样的错误

【问题讨论】:

  • 尝试输出Convert.ToString(DateTime.Now) 给你的东西......还有,为什么要把它变成一个字符串然后再解析回来?这是完全没有必要的。
  • 你为什么要转换它,你只是想使用 DateTime.now,作为一个日期时间,为什么要把它作为文本并告诉编译器你正在发送日期时间
  • 试试:db.AddInParameter(objdbCommand, "@dtAddedOn", DbType.DateTime, DateTime.Now);
  • 原因是 Fildor 和我说的工作是 datetime 不是字符串,因此它没有“格式”它是二进制值
  • 你想试试 DateTime.ParseExact(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss"), @"dd-MMM-yyyy HH:mm:ss") ,这是没有意义的/低效的。 @Fildor 有更好的答案。 Convert.ToString 可能正在使用您的默认 CultureInfo,因此不匹配。如果要去除日期部分,只需使用 DateTime.Now.Date 而不是 DateTime.Now。从您的问题中不清楚您想要哪一个。

标签: c#


【解决方案1】:

由于您无论如何都要插入 DateTime,因此您无需转换为字符串并解析回 DateTime。

db.AddInParameter(objdbCommand, "@dtAddedOn", DbType.DateTime, DateTime.Now);

会成功的。

DateTime 没有格式。只要您需要DateTime 代表的值的文本表示,格式就会发挥作用。我也不建议为此使用Convert,而是使用DateTime.ToString 重载之一。

编辑:

如果您不想包含时间部分,即插入日期,则只能使用DateTime.Now.Date(请参阅Date Property)或更简单的DateTime.Today。这将为您提供一个 DateTime 对象,其中时间组件全部设置为零。

编辑 2:

请注意,使用DateTime 存在一些固有问题,特别是如果您的系统要跨不同时区使用。不过,深入研究这将超出此答案的范围。只是想给你一个提示。

您可能需要查看DateTimeOffset 和相关文章,例如Choosing between DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多