【问题标题】:String was not recognized as a valid DateTime. 6-26-2015字符串未被识别为有效的日期时间。 2015 年 6 月 26 日
【发布时间】:2015-06-26 14:15:30
【问题描述】:

我在这里尝试了几个问答并制作了这段代码: 想法是将 dt1 与 dt2 进行比较,然后再做一些事情。

date = row.Cells[3].Value.ToString();
DateTime dt1 = DateTime.ParseExact(date, "M/d/yyyy", CultureInfo.InvariantCulture);
dt1 = dt1.AddDays(-4);
String dateStr = DateTime.Now.ToString("M/d/yyyy");
DateTime dt2 = DateTime.ParseExact(dateStr, "M/d/yyyy", CultureInfo.InvariantCulture);    

在最后一行我遇到了这个异常:

字符串未被识别为有效的日期时间。

调试时这些值是:
date = 06/05/2015
dt1 = "01-Jun-15 12:00:00 AM
datestr = 6-26-2015

【问题讨论】:

  • 在最后一行我遇到了这个异常:{“字符串未被识别为有效的 DateTime。”} 调试时这是值:date = "06/05/2015" dt1 = " 01-Jun-15 12:00:00 AM" datestr = "6-26-2015"
  • 应该编辑您的问题以添加该信息。 :-)
  • 出于好奇:您是否有理由将DateTime 转换为string 只是为了再次将其解析回DateTimeDateTime dt2 = DateTime.Now.Date;(或DateTime.Today)不会以更干净的方式获得相同的结果吗?
  • 嗨 Corak,我正在尝试处理不同的地理日期格式,这就是为什么,我不确定是不是正确的方法。
  • @dracebus - 好的,为了避免在使用 DateTime(或任何具有特定文化表示的数据类型)时感到头疼,我通常将其转换为应该尽快的真实数据类型, 使用它,并且仅在尽可能晚地显示数据时再次获得特定于文化的表示。 -- 也尽量保持IFormatProvider 同步。目前,您没有在ToString() 中指定一个,默认为CurrentCulture。在你的情况下CurrentCulture != InvariantCulture。这也导致了部分问题。

标签: c# .net date datetime


【解决方案1】:

如果datestr 值为“6-26-2015”,则您的格式不正确 你应该使用这个:

DateTime dt2 = DateTime.ParseExact(dateStr, "M-d-yyyy", CultureInfo.InvariantCulture); 

ParseExact 尝试将输入字符串与给定格式匹配。

在您的情况下,输入字符串为6-26-2015,格式为M/d/yyyy-/ 无法匹配,因此引发异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多