2017-09-26 106 views
-5

我有这个日期格式从D:在日期20170328092616+01'00'的PDF文件,我试图解析这种格式。解析这个日期格式?

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

但是,代码将引发FormatException。我该如何解决这个问题?

+1

这对你很好 - 这篇文章是关于什么的? – BugFinder

+0

@BugFinder试图了解这个fromat,所以我可以得到日期 – asad3dsfd3

+0

但你已经有了字符串概述格式.. – BugFinder

回答

0

你的日期字符串有一个奇怪的格式。此作品:

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

1

这是DateTimeOffset:DateTime与时区信息。

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

你必须找到正确的CultureInfo,或更换为':在时区部分

0

你的主要问题是,字符串的时区不能使用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)。