9

カスタムDateTimeフォーマット文字列があります: "M/d/yyyy h:m:ss tt".

たとえば、日付が「2012 年 9 月 18 日 @ 正午」の場合、この出力は"9/18/2012 12:0:00 PM".

時間は適切にフォーマットされているようですが、日付部分がめちゃくちゃになっています。日付が次のようにフォーマットされていますが、その"MM-dd-yyyy"理由がわかりません。

問題を再現するためのサンプル コードを次に示します。

var datetime = DateTime.Now;
Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy"));       // Date: October 11, 2012 --> correct
Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt")); // Date: 10-11-2012 4:34:17 PM --> wrong

カスタムの DateTime 書式文字列に関する MSDN のドキュメントは次のとおりです。

私が間違っていることについてのアイデアはありますか?希望する結果を得るにはどうすればよいですか?

編集:
サンプル コードの最後の行で間違っているのは、スラッシュの代わりにハイフンがあり、その理由がわかりません。

また、コンピューターの言語は英語 (カナダ) に設定されています。しかし、私の「短い」日付形式も「長い」日付形式もないように見えるM-d-yyyyので、それがどこから来ているのかわかりません。

4

5 に答える 5

18

/はカルチャに依存する日付区切り記号です。現在のカルチャでは として定義されてい-ます。常に使用したい場合/

Console.WriteLine("Date: " + datetime.ToString("M\"/\"d\"/\"yyyy h:m:ss tt"));

また

Console.WriteLine("Date: " + datetime.ToString("M'/'d'/'yyyy h:m:ss tt"));

つまり、「そのまま」出力したい部分を引用符で囲みます。

于 2012-10-11T23:01:20.533 に答える
13

試す:

datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture);

カルチャが日付区切り記号をオーバーライドしている可能性があります。

于 2012-10-11T22:52:22.350 に答える
2

この記事では、現在のカルチャが DateTime.ToString(string) の出力を変更する方法について説明します。次のテキストを含むセクションを読んでください。

このメソッドは、現在のカルチャから派生した書式設定情報を使用します

この記事では、この可能性をテストできるようにカルチャを取得/設定する方法について説明します。

この記事では、使用するカルチャを DateTime.ToString に明示的に提供する方法について説明します。

于 2012-10-11T22:57:42.360 に答える
1

InvariantCulture プロパティを使用して、インバリアント カルチャを追加してみてください。

Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt", CultureInfo.InvariantCulture));
于 2012-10-11T23:03:07.000 に答える
0
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
var datetime = DateTime.Now;
Console.WriteLine("Date: " + datetime.ToString("MMMM d, yyyy"));

// Date: October 11, 2012 --> correct
Console.WriteLine("Date: " + datetime.ToString("M/d/yyyy h:m:ss tt"));
于 2015-08-26T18:41:33.470 に答える