0

重複の可能性:
日付形式を dd/MM/yyyy から MM/dd/yyyy に変更する

日付が MM/DD/YYYY で表示される文字列フィールドがありますが、YYYY-MM-DD にする必要があります。

これは次のようになります。

DateReported = (e.Attribute("hciIIDateReported")

おそらくstring.Format()を実行できると思いましたが、YYYY-MM-DDのみを与えるカスタムの日付と時刻のフォーマット文字列が見つかりません。私がその形式で見つけたものには時間が付属しており、機能しません。何かアドバイス?

4

7 に答える 7

2

Henk の投稿によると、重複としてこれに投票するところだったのですが、「YYYY-MM-DD のみを与えるカスタムの日付と時刻の書式文字列が見つからない」とあなたが言っていることに気付きました。それは私には奇妙に思えます -カスタムの日付と時刻のフォーマット文字列に関する MSDN ドキュメントを読みましたか?

重要なのは、ほとんどの場合、インバリアント カルチャを使用して解析と書式設定の両方を行う必要があることです。通常、インバリアント カルチャ (またはその他の既知の固定カルチャ) ではカスタム フォーマット パターンを使用し、ユーザーのカルチャでは標準フォーマット パターンを使用します。

したがって、次のようなものが必要です。

var culture = CultureInfo.InvariantCulture;
DateTime parsed = DateTime.ParseExact(text, "MM/dd/yyyy", culture);
string formatted = parsed.ToString("yyyy-MM-dd", culture);

ただし、この値をできるだけ長く維持することを強くお勧めします。すぐDateTimeに文字列として必要ですか?実際には、絶対に強制されているAPI境界でのみ文字列に変換する必要があります.IMO. 追加するすべてのコンバージョンは、エラーの潜在的な原因となります。

余談ですが、より豊富な日付/時刻型のセットを使用したい場合は、私のNoda Timeライブラリを検討することをお勧めします。ここでは、この値を として保持できるためLocalDate、時刻コンポーネントがないことが明確になります。 ...

また、これらが有効でない可能性があるユーザー入力の値である場合は、DateTime.TryParseExact代わりに使用することを検討する必要があります。

于 2012-08-01T20:18:43.077 に答える
1

最初に解析できます:

DateTime datetime = DateTime.Parse("01/01/2012");

UK ロケールを使用していない場合は、次を追加する必要があります。

DateTime datetime = DateTime.Parse("01/01/2012", new CultureInfo("en-GB"));

そして吐き出す

string output = datetime.ToString("yyyy-MM-dd");
于 2012-08-01T20:16:24.493 に答える
1

試すDateTime.ParseExact(yourDateString, "MM/dd/yyyy", null).ToString("yyyy-MM-dd")

コメントの後に編集:

DateTime.ParseExact(yourDateString, @"MM\/dd\/yyyy", null).ToString("yyyy-MM-dd")

/スラッシュ ( ) が日付形式文字列で特別な意味を持っていることを忘れていました。今ではエスケープされており、これは機能しているようです。私はそれを試してみました。

CultureInfo.InvariantCultureただし、現在のカルチャ (で得られるもの) の代わりに「プロバイダー」として使用する方が安全ですnull。そうすれば、結果が異なるエキゾチックな文化が存在することを心配する必要はありません。

于 2012-08-01T20:16:59.363 に答える
0
DateReported.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);

編集:これは、DateReported が DateTime 型であると想定しています。

于 2012-08-01T20:13:18.663 に答える
0

MSDN カスタム フォーマット文字列へのリンクは次のとおりです。 http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.71).aspx

今、次のような独自のものを構築できる場合:

DateTime.Now.ToString("yyyy-MM-dd");

あなたの場合、 DateReported を印刷したい場合、これは次のようになります。

Console.WriteLine(DateReported.ToString("yyyy-MM-dd"));
于 2012-08-01T20:17:43.207 に答える
0

これは確かに機能します

string DateReported = DateTime.ParseExact(e.Attribute("hciIIDateReported"), "MM/dd/yyyy", null).ToString("yyyy-MM-dd");
于 2012-08-01T20:38:48.240 に答える
-3

すでにそのフィールドしかない場合は、文字列処理が最も簡単な方法かもしれません。

string processDate(string inputDate) // inputdate is like "02/05/1995"
{
    string [] fields = inputdate.Split('/');
    return string.Format("{0}-{1}-{2}", fields[2], fields[0], fields[1]);
}

私はそれがうまくいくと思います。最初にそれをDateTimeに変換できれば、他のいくつかの答えも機能します。

于 2012-08-01T20:15:09.473 に答える