【问题标题】:Parse this date format?解析这种日期格式?
【发布时间】:2018-03-07 10:53:40
【问题描述】:

我在日期 20170328092616+01'00' 之前从带有 D: 的 PDF 文件中获得了这种日期格式,我正在尝试解析这种格式。

DateTime parsedDate = DateTime.ParseExact(
    "D:20170328092616+01'00'",
    "0:yyyyMMddhhmmss",
    CultureInfo.CurrentCulture,
    DateTimeStyles.None);

但是,代码会抛出 FormatException。我该如何解决这个问题?

【问题讨论】:

  • 这对你来说很好 - 这篇文章是关于什么的?
  • @BugFinder 试图从 at 理解这一点,以便我可以得到日期
  • 但是你已经有了概述格式的字符串..
  • 这有什么难的?格式在后面,它意味着四个字符的年份,两个字符的月份,两个字符的日期,两个的小时,两个的分钟,两个的秒。 +1 是您所在的时区,表示 GMT + 1。

标签: c# .net pdf


【解决方案1】:

这是DateTimeOffset:带有时区信息的日期时间。

var offset = DateTimeOffset.Now.ToString("D:yyyyMMddhhmmsszzzz"); // this produces "D:20170926114506+02:00"
 var parsedDate = DateTimeOffset.ParseExact(offset, "D:yyyyMMddhhmmsszzzz", CultureInfo.CurrentCulture);

您必须找到适当的 CultureInfo,或在时区部分将 ' 替换为 :

【讨论】:

    【解决方案2】:

    您的主要问题是无法使用DateTime.ParseExact 解析字符串的时区,因为它包含引号。但是,您可以删除引号以使其可解析。同时你也可以去掉前面的D:,即使这些额外的字符不会导致无法解析时间戳。

    "D:20170328092616+01'00'".Substring(2).Replace("'", "")
    

    您还应该使用CultureInfo.InvariantCulture 而不是CultureInfo.CurrentCulture。您不知道后者是什么,并且可能存在文化无法解析时间戳的情况。

    请注意,格式特定 hh 是 12 小时格式,我很确定您希望 HH 是 24 小时格式。否则,您需要在时间戳中添加 AM/PM。

    把所有这些放在一起,你会得到:

    DateTime parsedDate = DateTime.ParseExact(
        "D:20170328092616+01'00'".Substring(2).Replace("'", ""),
        "yyyyMMddHHmmsszzzz",
        CultureInfo.InvariantCulture,
        DateTimeStyles.None);
    

    您应该知道,解析日期的类型是Local,这意味着parsedDate 被转换为本地时区(时间戳包含一个偏移量,因此定义明确)。根据您打算如何使用解析的日期,您可能会更好地解析为类型Utc。您可以使用DateTimeStyles.AdjustToUniversal 而不是DateTimeStyles.None 来做到这一点。或者您可以切换到使用 DateTimeOffset 而不是 DateTime,这将保留原始偏移量 (+01:00)。

    【讨论】:

      【解决方案3】:

      您的日期字符串的格式很奇怪。这有效:

      Console.Write(DateTime.ParseExact("20170328092616+01:00", "yyyyMMddhhmmsszzz", System.Globalization.CultureInfo.InvariantCulture));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 2020-09-14
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多