1

次のタイプの日付を解析(正確)するための適切なフォーマット文字列を見つけようとしています。

  • 1-01-01T00:00:00+00:00-0001年1月1日
  • 2011-12-14T15:53:40+00:00-2011年12月14日

したがって、年の長さは可変(1〜4文字)のようです。

私が現在正確に解析するために使用しているフォーマットスティングは次のとおりです。
c_DateTimeFormatString = "yyyy-MM-ddTHH':'mm':'sszzz"

明らかに、これは2番目の文字列にのみ一致します。最初のものが今日現れました。今、私たちはそれも一致させる必要があります。

これを実現するためのフォーマット文字列はありますか?

更新#1
入力した日付文字列の後にクリアテキストで実際の日付を追加しました。

UPDATE#2
正確な解析には、複数のフォーマット文字列を渡すことができるオーバーロードがあります。これは正しい方法のようです。

したがって、最初の試みは次を使用することでした。

DateTime.ParseExact("1-01-01T00:00:00+00:00 ", new[] { "yyyy-MM-ddTHH':'mm':'sszzz", "yyy-MM-ddTHH':'mm':'sszzz", "yy-MM-ddTHH':'mm':'sszzz", "y-MM-ddTHH':'mm':'sszzz" }, CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.AssumeLocal)

しかし悲しいことに、これは正しい結果をもたらさず、最初の日付文字列は次のように解析されます:
01.01.2001
ではなく
01.01.0001

では、問題は、1桁だけで表される1年目を解析するための正しい解析文字列は何でしょうか。

4

6 に答える 6

2

ParseExact のオーバーロードを使用して、複数の形式に一致させることができると思います。

MSDNを参照してください。

于 2011-12-14T16:45:07.217 に答える
2

コメントに基づいて更新:

string y = "yyyy-MM-ddTHH':'mm':'sszzz";

string testDate = "1-01-05T00:00:00+00:00".PadLeft(25, '0');
Console.WriteLine(DateTime.ParseExact(testDate, y, CultureInfo.InvariantCulture));
testDate = "2011-12-14T15:53:40+00:00".PadLeft(25, '0');
Console.WriteLine(DateTime.ParseExact(testDate, y, CultureInfo.InvariantCulture));

出力は次のとおりです。

1/5/0001 00:00:00
12/14/2011 15:53:40
于 2011-12-14T17:06:54.893 に答える
0

年を 1 ~ 4 文字で一致させる必要はないと思いますが、2 ~ 4 文字で一致させる必要があります。

この例では

1-01-05T00:00:00+00:00

次のようなものが必要です

d-MM-yyTHH':'mm':'sszzz

于 2011-12-14T16:41:09.997 に答える
0

年が 4 桁の長さになるように文字列をパディングしてみてください。おそらく、0 だけでなく、2、20、または 201 を追加する必要があります。

于 2011-12-14T16:41:20.637 に答える
0

複数の形式をサポートする必要があることはわかっているので、TryParseExact メソッドを使用することをお勧めします。

1 つの形式を使用して解析に失敗した場合 (つまり、false を返す)、次の形式を試してください。

于 2011-12-14T16:58:10.627 に答える
0

入力形式がすべて正確に同じではない場合は、正確な解析の使用を停止するか、入力データの形式に応じて異なる形式の引数で呼び出す必要があります。

于 2011-12-14T16:40:08.997 に答える