2017-05-31 67 views
-1

我試圖將Active Directory屬性(whenCreated)轉換爲DateTime然後String,但我不斷收到一個FormatException,有什麼想法爲什麼?下面是代碼:mscorlib.dll中的System.FormatException用於DateTime轉換

string format = "YYYYMMDDHHMMSS.0Z"; 
DateTime dt = DateTime.ParseExact(sResult.Properties["whenCreated"][0].ToString(),format,CultureInfo.InvariantCulture); 
string whenCreated = dt.ToString(); 

此外,sResult.Properties["whenCreated"][0].ToString()是從Active Directory搜索(檢索日期)的結果,並有串(通用時間)的語法。

+0

你調試的代碼? sResult.Properties [「whenCreated」] [0]包含什麼值? –

+1

字符串的實際值是多少? –

+0

該字符串是具有String(Generalized Time)語法的Active Directory屬性,如MS所述https://msdn.microsoft.com/en-us/library/ms684436%28v=vs.85%29.aspx。我已經做了一個格式錯誤,我會在後期修復(但仍然不起作用)。 –

回答

1

DateTime.ParseExact方法需要一個格式字符串,該格式字符串告訴它在輸入字符串中哪個組件的有效日期。您的'd'格式不符合此標準。我不知道你的輸入內容(如果你添加它會有幫助)。但讓我們假設今天是「2017/31/05 10:27:45」。然後,您的格式字符串必須是: 「YYYY/DD/MM HH:MM:SS」

DateTime dt = DateTime.ParseExact("2017/31/05 10:27:45","yyyy/dd/MM HH:mm:ss",CultureInfo.InvariantCulture); 
+0

是的,我剛剛看到了,並在我的帖子中修復。我現在放的格式是我從輸入字符串中檢索的格式。 –

+0

什麼是您從Active Directory獲得的示例值? –

+0

02/09/2008 11:26:38。對不起,真的很糟糕的問題這解決了我的問題,我習慣於具有特定格式的Active Directory屬性accountExpires,並且認爲AD中的所有日期都必須進行轉換,但這符合我的需求。感謝幫助! –

1

據OP鏈接的documentation

廣義時間格式語法是「YYYYMMDDHHMMSS.0Z」。一個可接受的值的一個例子是「20010928060000.0Z」

和:

如果在比GMT以外的時間帶規定的時間,時區和GMT之間的差被附加到字符串替代「Z」形式爲「YYYYMMDDHHMMSS.0 [+/-] HHMM」。可接受值的一個例子是「20010928060000.0 + 0200」

所以你需要爲了解析字符串,像這兩格式字符串:

string adDate = "20010928060000.0Z"; 
string adDate2 = "20010928060000.0+0200"; 

string format = "yyyyMMddhhmmss.0Z"; 
string format2 = "yyyyMMddhhmmss.0zzz"; 
DateTime dtdtdt = DateTime.ParseExact(adDate2, new string[] { format, format2 }, 
          CultureInfo.InvariantCulture,DateTimeStyles.None); 
+0

「Z」表示UTC偏移量(帶有+/-符號),但仍可能產生「字符串未被識別爲有效日期時間」。 –

+0

@TetsuyaYamamoto看到我更新的答案 – Pikoh