2017-03-17 191 views
0

我得到我的約會時間,如「20170317 630」 的格式,這意味着2017年上午6:30未能解析使用DateTime.TryParseExact()在YYYYMMDD嗯格式日期

這裏3月17日是代碼塊我在嘗試,但它失敗了。

var str = "20170317 0630"; 
var formatedTime = "yyyyMMdd Hmm"; 
DateTime etaDate; 
if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
{ 
    Console.WriteLine("Date conversion failed " + etaDate); 
} 

Console.WriteLine("Date conversion passed "+etaDate); 

通過爲:20170317 0630

失敗的:20170317 630

請幫助我。

回答

0
//split str in to strDate and strTime by using space 
    var strDate = "20170317"; //Date part 
    var strTime ="630";  //Time part 
    if(strTime.Length ==3) //check lenght of time part 
    { 
     strTime = "0" + strTime; //Add extra zero 
    } 
    var formatedTime = "yyyyMMdd HHmm"; 
    DateTime etaDate; 
    if (!DateTime.TryParseExact(strDate + strTime,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
    { 
     Console.WriteLine("Date conversion failed " + etaDate); 
    } 

    Console.WriteLine("Date conversion passed "+etaDate); 
-2

嘗試:

var str = "20170317 0630"; 
    var formatedTime = "yyyyMMdd HHmm"; 
    DateTime etaDate; 
    if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
    { 
     Console.WriteLine("Date conversion failed " + etaDate); 
    } 

    Console.WriteLine("Date conversion passed "+etaDate); 
+0

當輸入了「630」,而不是「0630」這是行不通的。 –

4

我不完全驚訝它的失敗解析 - 我懷疑這是貪婪地解析「63」,並根據認爲是一個無效的小時數。我們有exactly the same problem in Noda Time - 我不打算修復它。做這項工作將是一個巨大的努力,並且很可能會降低性能以獲得更明智的格式。

我強烈建議轉向更明智的格式,例如的

  • H:mm之一刪除僞歧義
  • HHmm,使這一切更清晰
  • HH:mm甚至更​​好,IMO - preferrably用連字符日期部分,所以yyyy-MM-dd HH:mm

你可以通過簡單地檢測字符串的長度,從一種格式轉換爲另一種格式,因爲每一部分都是固定的長度。例如,剛剛轉會使用HHmm你可以這樣做:

if (str.Length == "yyyyMMdd Hmm".Length) 
{ 
    str = str.Insert("yyyyMMdd ".Length, "0"); 
} 

然後用yyyyMMdd HHmm格式解析。如果長度不正確或者有效寬度爲,那麼無論如何它都將無法解析。

+1

@CodeCaster:不要,只是走長 - 見我的編輯。 –

+0

應該知道你會更快哈哈。好建議 – EpicKip

+0

是的,只要您提供了示例實現,我就會刪除我的評論。只要在無條件日期前的所有內容都是固定長度,那就行得通了。 :) – CodeCaster