2017-05-31 11 views
-1

Active Directory属性(whenCreated)をDateTimeとStringに変換しようとしていますが、FormatExceptionが発生する理由は何ですか?ここでは、コードです:DateTime変換用のmscorlib.dllのSystem.FormatException

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

この文字列は、MS https://msdn.microsoft.com/en-us/library/ms684436%28v=vs.85%29.aspxで説明されているように、String(Generalized Time)構文を持つActive Directory属性です。私は書式で間違いを犯しましたが、私はポストで修正します(しかしまだ動作しません)。 –

答えて

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との間の差がに追加され"YYYYMMDDHHMMSS.0 [+/-] HHMM"の形式で "Z"の代わりに文字列を入力します。許容値の例は、「+ 0200 20010928060000.0」である

だから、このように、文字列を解析するために、2つのフォーマット文字列を必要とするだろう:

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オフセット(+/-符号付き)を表しますが、 "有効なDateTimeとして認識されない文字列"が生成されることがあります。 –

+0

@TetsuyaYamamoto最新の回答を見る – Pikoh