7

フォーマットの日付を解析しようとしています:

2013-09-17T05:15:27.947

これは私のコードです

String MessageRecieptDate = messageReceiptDate.Replace("T", " ").Remove(messageReceiptDate.Length-4);
DateTime dt = new DateTime();
IFormatProvider culture = new CultureInfo("en-US");
dt = DateTime.ParseExact(MessageRecieptDate, "dd MMM", culture);

ただし、毎回何らかの形式の例外が発生します。基本的なものが欠けているようです。

4

6 に答える 6

10

"dd MMM"日付が のときに、なぜフォーマット文字列として使用しているのかわかりません"2014-02-03T19:00:00"。2 つのフォーマットには共通点はありません。

入力の適切なフォーマット文字列は次の"yyyy-MM-ddTHH:mm:ss"とおりです。

string value = "2014-02-03T19:00:00";
DateTime dateValue = DateTime.ParseExact(value, "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
于 2013-09-09T12:21:48.087 に答える
4

何が動作するはずです:

//without ParseExact
var t1= DateTime.Parse(dt);

//you don't know how many milliseconds will be in your string, 
//and want absolutely use ParseExact anyway
var t2= DateTime.ParseExact(dt.PadRight(27, '0'), "o", culture);

//you know you'll always have 3 chars for milliseconds.
var t3= DateTime.ParseExact(dt, "yyyy-MM-ddTHH:mm:ss.fff", culture);
于 2013-09-09T12:32:51.650 に答える
2

DateTime.TryParseExactを使用する

DateTime dateValue;
string dateString = "2013-09-17T05:15:27.947";
string[] formats= {"yyyy-MM-ddTHH:mm:ss"};
if(DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
{
   //parsing successful
}
于 2013-09-09T12:27:04.480 に答える
2

あなたの文字列形式は完全に間違っています:

入力文字列に一致する形式を指定する必要があります。つまり、次のようになります。"yyyy-MM-ddTHH:mm:ss"

 string MessageReceiptDate = "2014-02-03T19:00:00";
 var datex = DateTime.ParseExact(MessageReceiptDate, "yyyy-MM-ddTHH:mm:ss", culture);
于 2013-09-09T12:22:59.603 に答える
1

この行:

dt = DateTime.ParseExact(MessageRecieptDate, "dd MMM", culture);

の日付形式が間違っています。

次のようになります。

dt = DateTime.ParseExact(MessageRecieptDate, "yyyy-MM-ddTHH:mm:ss", culture);
于 2013-09-09T12:23:35.970 に答える