【问题标题】:How to convert data into DateTime object如何将数据转换为 DateTime 对象
【发布时间】:2010-07-15 15:35:49
【问题描述】:

如何将“ccyymmdd”一般形式的日期字符串转换为 C# 中的 DateTime 对象?

例如,如何将“20100715”转换为 DateTime 对象。

请 - 没有指向 Microsoft 技术文档的 RTFM 链接。

非常感谢...

【问题讨论】:

  • “c”占位符代表什么?
  • @jlafay “c”代表世纪。示例:ccyy = 2010
  • 假设您的真正意思是 4 位数的年份、2 位数的月份和 2 位数的日期,您希望在今年的最后一天使用 var dt = DateTime.Parse("20101231");
  • -1 如果您不愿意使用 RTFM,为什么要让 stackoverflow 为您工作?
  • 感谢大家的及时回答。不得不说我很惊讶“ccyy”似乎让一些人失望。多年来我一直使用这种通用形式,因为它有助于我在处理仅支持日期格式(例如“dd-mm-yy”)的遗留软件时区分。对于可能造成的任何混乱,我们深表歉意。

标签: c# datetime data-conversion


【解决方案1】:
using System.Globalization;

DateTime.ParseExact("20100715", "yyyyMMdd", CultureInfo.InvariantCulture);

【讨论】:

  • 在所有答案中,我认为这是解析日期字符串最简洁的方法。
  • 看准迈克。非常感谢。你救了我剩下的一点头发。
  • 没问题。我们愚蠢地挑战的家伙需要团结在一起。 :)
  • 这也是我格式化 DateTimes 的方式,回答相同的解决方案毫无意义。干得好迈克。 +1
【解决方案2】:

var dt = DateTime.Parse("your date string").ToString("yymmdd");

我认为cc 不是有效的日期格式选项?

正如 Richard 所指出的,您还可以使用 DateTime.ParseExact,它允许您使用文化信息进行解析,或者您可以使用与 DateTime.ParseExact 相同的 DateTime.TryParseExact,但如果有异常,则返回空日期,而不是引发异常。

编辑:

问题已更新,因此专门返回了 DateTime。在这种情况下,您可以省略我的答案中的 .ToString() 部分。调用 DateTime.Parse() 将返回一个 DateTime 对象。通过ToString() 获取日期值时,只需传递所需的格式字符串即可获取所需格式的日期。 干杯。 贾斯。

【讨论】:

  • 这意味着世纪。这是 OP 询问的大部分(如果不是全部)。
  • 谢谢杰森。是的,我知道“cc”是可疑的,我只是用它来帮助区分世纪和世纪中的年份。
  • +1 但@Jason Evans 您可能需要编辑答案以将其保留为日期时间对象,而不是将其转换回字符串。我认为这就是@Noldorin 的意思。
  • @Noldorin - 很公平,我已经向他展示了如何在 .NET 中解析日期,但没有向他展示如何包含世纪值。我已经为你 +1 了,公平竞争,你提供了更彻底的解决方案。
  • @Jason:非常荣幸。如果您充实了有关cc 在字符串中无效的内容...并删除了 ToString 调用,我可以将-1更改为+1,但我的投票永远不会不可变。 :)
【解决方案3】:

看看thisthis

DateTime.Parse();
DateTime.ParseExact();

值得一提

DateTime.TryParse();

【讨论】:

    【解决方案4】:

    如果您的日期字符串已经过清理(借自 Mike 的回答):

    DateTime dt = DateTime.ParseExact("20100715", "yyyyMMdd", CultureInfo.InvariantCulture);
    

    否则:

    DateTime dt;
    if (!DateTime.TryParseExact("20100715", "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
    {
        // Handle bad date
    }
    

    【讨论】:

    • 它仅表示 2010 年的 20(OP 表示 yyyymmdd)- DateTime 对象可以很好地处理它。
    • DateTime.Parse("20100715") 抛出 System.FormatException。
    • 他改了,现在可以了,但是以前不行。我删除了我的 -1
    • 我认为它被否决了,因为它不起作用。请参阅我之前的评论。
    • @Mike,你是对的 - 我认为它的工作方式与 SQL Server 解析器相同。问题比最初看起来要复杂。
    【解决方案5】:

    System.DateTime.Parse(yourDateString)

    您可能必须将字符串操作为该方法可以首先处理的格式。

    http://msdn.microsoft.com/en-us/library/1k1skd40.aspx

    更多信息

    【讨论】:

      【解决方案6】:

      我不确定“cc”部分是什么,但有几个选项。

      DateTime.Parse(string) 可能能够转换字符串,但如果字符串是非标准格式,您可能需要先进行一些预转换。

      【讨论】:

      • cc 在 19xx 年为 19,在 20xx 年为 20。
      • 那么 1970 年 1 月 1 日的例子是 19700101?这几乎可以肯定是一个非标准字符串。您可以尝试 DateTime.Parse,如果它不起作用,则必须重新处理字符串,然后 然后 将经过清理的字符串输入 DateTime.Parse。
      • yyyyMMdd 与日期格式一样标准。见en.wikipedia.org/wiki/ISO_8601#Calendar_dates
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2011-11-21
      相关资源
      最近更新 更多