解析这个日期格式?

时间:2017-09-26 09:28:13

标签: c# .net pdf

我在日期D:之前使用20170328092616+01'00'的PDF文件提供此日期格式,并且我正在尝试解析此格式。

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

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

3 个答案:

答案 0 :(得分: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,或者替换' with:在时区部分

答案 1 :(得分:1)

您的主要问题是无法使用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)。

答案 2 :(得分:0)

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

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