C# 日期时间格式-无法识别一位数的日期

C# 日期时间格式-无法识别一位数的日期,c#,datetime,formatting,C#,Datetime,Formatting,我需要读取以下格式的字符串:“6102015”(意思是2015年10月6日),并将其转换为DateTime对象 我尝试了以下代码,但无效: DateTime.ParseExact("6102015", "dMyyyy", CultureInfo.CurrentCulture); 但是当我使用带有额外0的日期字符串测试代码时,它起了作用 DateTime.ParseExact("06102015", "dMyyyy", CultureInfo.CurrentCulture); // works

我需要读取以下格式的字符串:“6102015”(意思是2015年10月6日),并将其转换为DateTime对象

我尝试了以下代码,但无效:

DateTime.ParseExact("6102015", "dMyyyy", CultureInfo.CurrentCulture);
但是当我使用带有额外0的日期字符串测试代码时,它起了作用

DateTime.ParseExact("06102015", "dMyyyy", CultureInfo.CurrentCulture); // works correctly
有没有一种方法可以在不添加0的情况下读取此日期格式

我提前感谢你的帮助

有没有一种方法可以在不添加0的情况下读取此日期格式

在我看来,添加一个0是你最不担心的事情。这需要一行代码

假设您有数据库的副本或可以有效更改的内容,我会:

  • 创建日期/时间类型的字段,或者如果必须使用字符串,则使用ISO-8601格式(yyyy-MM-dd)
  • 解析所有已经是8个字符的值
  • 通过插入两个0来解析所有6个字符的值(因此
    abccc
    变成
    0a0bcccc
  • 对于每个剩余值,格式为
    abcyyy
    • 尝试将其解析为
      0abcyyy
    • 尝试将其解析为
      ab0cyyyy
    • 如果只有一个解析有效,则将该结果存储在新列中
  • 现在查看所有剩余的行(即尚未填充“已知良好”值的行)
    • 您可以使用其他数据(例如插入顺序)来确定哪个是“正确的”解析
    • 你可能不会,在这种情况下,你需要决定做什么
  • 有没有一种方法可以在不添加0的情况下读取此日期格式

    在我看来,添加一个0是你最不担心的事情。这需要一行代码

    假设您有数据库的副本或可以有效更改的内容,我会:

  • 创建日期/时间类型的字段,或者如果必须使用字符串,则使用ISO-8601格式(yyyy-MM-dd)
  • 解析所有已经是8个字符的值
  • 通过插入两个0来解析所有6个字符的值(因此
    abccc
    变成
    0a0bcccc
  • 对于每个剩余值,格式为
    abcyyy
    • 尝试将其解析为
      0abcyyy
    • 尝试将其解析为
      ab0cyyyy
    • 如果只有一个解析有效,则将该结果存储在新列中
  • 现在查看所有剩余的行(即尚未填充“已知良好”值的行)
    • 您可以使用其他数据(例如插入顺序)来确定哪个是“正确的”解析
    • 你可能不会,在这种情况下,你需要决定做什么
  • 有没有一种方法可以在不添加0的情况下读取此日期格式

    在我看来,添加一个0是你最不担心的事情。这需要一行代码

    假设您有数据库的副本或可以有效更改的内容,我会:

  • 创建日期/时间类型的字段,或者如果必须使用字符串,则使用ISO-8601格式(yyyy-MM-dd)
  • 解析所有已经是8个字符的值
  • 通过插入两个0来解析所有6个字符的值(因此
    abccc
    变成
    0a0bcccc
  • 对于每个剩余值,格式为
    abcyyy
    • 尝试将其解析为
      0abcyyy
    • 尝试将其解析为
      ab0cyyyy
    • 如果只有一个解析有效,则将该结果存储在新列中
  • 现在查看所有剩余的行(即尚未填充“已知良好”值的行)
    • 您可以使用其他数据(例如插入顺序)来确定哪个是“正确的”解析
    • 你可能不会,在这种情况下,你需要决定做什么
  • 有没有一种方法可以在不添加0的情况下读取此日期格式

    在我看来,添加一个0是你最不担心的事情。这需要一行代码

    假设您有数据库的副本或可以有效更改的内容,我会:

  • 创建日期/时间类型的字段,或者如果必须使用字符串,则使用ISO-8601格式(yyyy-MM-dd)
  • 解析所有已经是8个字符的值
  • 通过插入两个0来解析所有6个字符的值(因此
    abccc
    变成
    0a0bcccc
  • 对于每个剩余值,格式为
    abcyyy
    • 尝试将其解析为
      0abcyyy
    • 尝试将其解析为
      ab0cyyyy
    • 如果只有一个解析有效,则将该结果存储在新列中
  • 现在查看所有剩余的行(即尚未填充“已知良好”值的行)
    • 您可以使用其他数据(例如插入顺序)来确定哪个是“正确的”解析
    • 你可能不会,在这种情况下,你需要决定做什么

  • 你真的应该避免这种格式。以“1112015”为例……那是2015年1月11日还是2015年11月1日?只要说“不”对于模棱两可的日期/时间格式…日期和时间代码很难正确处理,而不会出现这样不必要的问题。这是一个很好的观点。但由于我只是在处理其他人的数据库,所以我真的没有这种选择。我真的不知道如果我偶然遇到1112015我会怎么做。:/但感谢你的洞察力。我会和你谈谈然后找到数据库的所有者,并确保他们意识到a)当数据库具有本机日期/时间类型时,将日期/时间值存储为字符串是个坏主意;b)使用模棱两可的格式是一个非常可怕的想法。如果您假设第一个字段是当天,只要在它前面填入一个0(如果需要),然后将其转换。简言之,不,您将得到一个FormatException“s不包含日期和时间的有效字符串表示形式”。您应该真正避免这种格式。以“1112015”为例例如…是2015年1月11日还是2015年11月1日?对模棱两可的日期/时间说“不”