2013-08-22 16 views
7

Iした日付/時刻フォーマット、例えば: 「1-03月13 92230」 this documentthis linkによれば、次のようなフォーマットです。 「D-MMM-YY Hmmss」、ので:私は私のプログラムに次のコードを実行しようとしているが、私はのエラー取得維持日時変換 - DateTime.ParseExact()は期待通りに動作しない

Day is single digit, 1-30 
Month is 3 letter abbreviation, Jan/Mar etc. 
Year is 2 digits, eg 12/13 
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09) 
Minute is standard (eg 01, 52) 
Second is standard (eg 30, 02) 

「文字列が有効な日時として認識されませんでした。」

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture); 

私はDateTime変換についてあまりよく知らないが、ここで間違っていた箇所はわかりません。ありがとう!

更新:これは、時間をコロンを使わずに解析できないためですか? (例えば、1-03月13午前9時22分30秒で解析されますが、私はHにHmmssから書き換えることは不可能であろう外部データソースを有する:MM:SS)

答えて

4

var parts = "1-Mar-13 92230".Split(' '); 

if (parts[1].Length == 5) 
{ 
    parts[1] = "0" + parts[1]; 
} 

var newDate = parts[0] + " " + parts[1]; 

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss", System.Globalization.CultureInfo.CurrentCulture); 
+0

これは私のために働く。質問の日付/時刻と「1-Mar-13 102230」でテストされています。すべての場合に適用されます。最も重要なのは、ソースデータが変更されない限り(例えばスペースの追加など)便利です。ありがとう! – John

4

msdnより:

をformatが日付または のタイムセパレータ( "yyyyMMdd HHmm"など)を含まないカスタム形式のパターンの場合は、プロバイダーパラメーターには不変のカルチャ を使用し、それぞれのカスタム形式 指定子の最も広い形式を使用します。たとえば、時間を書式 の書式で指定する場合は、幅の狭い書式「 "H」ではなく、幅の広い書式「HH」を指定します。

あなたは試すことができます:

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture); 
+0

これはまだ「文字列が有効な日時として認識されませんでした」例外を与えています。 – Rex

+0

私は2番目のRexのコメントです。何らかの理由で、私はまだ例外を得る – John

+0

これは正しくない、例外はまだそこにある – Anand

0

を、彼らは区別取得されていませんとあなたの時間の分と秒は、分離する必要があります。

string input = "1-Mar-13 9 23 30"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss", System.Globalization.CultureInfo.CurrentCulture); 
1

あなたの入力文字列は、あなたが戻ってあなたのリンクに行く場合、それは今、Hが24時間である

H 24-hour clock hour (e.g. 19) 

、それが表現されなければならないと言い、次の形式

string input = "1-Mar-13 092330"; 

でなければなりませんあなたが9時以上の時間の大文字小文字をどのように扱うかを想像できない場合、つまり2桁の数字があると想像してください。

時間と分と秒を分ける必要がない場合。あなたがあなたの日付を修正することができ

string input = "1-Mar-13 9 2330"; 

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture); 
関連する問題