2017-09-26 101 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)。