2017-05-29 109 views
0

我在C#驗證Graph的日期時間字符串時遇到了一些麻煩。 facebook API文檔顯示:驗證Facebook DateTime字符串

2014-11-01T12:00-0300 

作爲日期時間格式。無論我嘗試什麼(甚至認爲他們可能在偏移量上忽略了「:」),它都沒有通過。我下面的代碼:

public bool validateDateTimeISO8601(string s) 
     { 
      // you may want to add a few more formats here 
      var formats = new[] { "yyyy-MM-ddThh:mm-hh", 
         "yyyy-MM-ddThh:mm-hh:mm", 
         "yyyy-MM-ddThh:mm+hh", 
         "yyyy-MM-ddThh:mm+hh:mm", 
         "yyyy-MM-ddThh:mmZ", 
         "yyyy-MM-ddThh:mm:ssZ" }; 

      DateTime dt; 
      if (DateTime.TryParseExact(s, formats, 
             CultureInfo.InvariantCulture, // ISO is invariant 
             DateTimeStyles.RoundtripKind, // this is important 
             out dt)) 
       return true; 

      return false; 
     } 

有6種格式在我的格式排列。最後2次傳球,但前4次失敗,無論我扔給他們什麼。

任何想法?

+0

使用http://nodatime.org/ – hardkoded

回答

1

當時的偏移量部分-0300將被zzz解析,而不是Z。檢查可用的格式說明符 .Net Reference

yyyy-MM-ddThh:mmzzz將解析您顯示的日期2014-11-01T12:00-0300

數組中的前4種格式只會在偏移量與時間匹配時解析日期。例如。 yyyy-MM-ddThh:mm-hh:mm將爲2014-11-01T12:00-12:00賦予true,但對於2014-11-01T12:00-03:00爲false。在這些中,我認爲您期望使用hhmm作爲偏移量,但這些將被解釋爲時間的小時和分鐘,而不是偏移量。這些對您嘗試實現的內容沒有幫助,因此請將其刪除。

+0

顯然我是唯一一個足夠愚蠢的不趕上.Net Z z差異。完美工作。 –