0

日付をこの形式にフォーマットしようとしています。2013/01/20 02:30PM EDT、これを使用

LastModified.ToString("MM/dd/yyyy HH:mmtt");

しかし、結果はこのようになっています

01-20-2013 02:30PM'-'代わりに表示されている理由がわかりません'/'

また、timezomeについては、 のような形式しか利用できないよう+02:00です。しかし、タイムゾーンを文字列として使用したいのですが、この形式が見つかりませんでした。EDT/PST/ISTなどのような文字列を取得するにはどうすればよいですか?

4

3 に答える 3

4

カスタムの日付と時刻の書式文字列に関する MSDN ページから:

"/" カスタム書式指定子は、年、月、日を区別するために使用される日付区切り記号を表します。適切なローカライズされた日付区切り記号は、現在または指定されたカルチャの DateTimeFormatInfoDateSeparator プロパティから取得されます。

を確実に使用する場合はインバリアント カルチャを使用する、スラッシュ ( ) を引用する/必要があります。文化によっても異なる可能性があるため、時間区切り記号も引用したことに注意してください。また、Arshad の回答に従って、12 時間時計を使用するように変更しました。"MM'/'dd'/'yyyy hh':'mmtt"

カスタムの日付/時刻形式を使用する場合は、とにかくインバリアント カルチャを使用する必要があります。(たとえば、英国のカルチャを使用して米国中心の方法で文字列をフォーマットするのは奇妙に思えます。今日は通常、英国では 05/02/2013 ではなく 02/05/2013 と表されます。)

タイムゾーン指定子に関しては、日付/時刻の書式設定でタイムゾーンの省略形を使用する方法がわかりません。あいまいで混乱を招く可能性があるため、とにかく略語を使用しないことを個人的にお勧めします. TimeZoneInfo手動で追加できるようにその情報を公開しているものは何も表示されません。

( Noda Timeでは、省略形を使用した書式設定をサポートする可能性がありますが、正確にあいまいさのため、解析はサポートしない可能性があります。)

于 2013-05-02T09:37:50.713 に答える
2

私は 1 つの間違いを見つけました。それHHは、24 時間形式の時間を意味します。あなたが試すことができます

string date = "01/20/2013 02:30PM";
DateTime dtTime;
if (DateTime.TryParseExact(date, "MM/dd/yyyy hh:mmtt",
    System.Globalization.CultureInfo.InvariantCulture,
    System.Globalization.DateTimeStyles.None, out dtTime))
{
    Console.WriteLine(dtTime);
}
于 2013-05-02T09:55:01.507 に答える
0

DateTime の書式設定は、カルチャと書式文字列の影響を受けます。現在のカルチャ ( Thread.CurrentThread.CurrentCulture) は、-日付コンポーネントのデフォルトの区切り文字として を使用しています。

The Culture of India は-and を使用しており、あなたは Inda 出身なので、それは理にかなっています (参照: http://en.wikipedia.org/wiki/Date_and_time_notation_in_India )

2 つのオプション:

  1. /デフォルトで をセパレータとして使用する正しいカルチャを選択します。例えば:LastModified.ToString("MM/dd/yyyy HH:mmtt", new CultureInfo("en-US"));
  2. または、フォーマット文字列をエスケープ文字で再フォーマットします\。例: 例:LastModified.ToString("MM\/dd\/yyyy HH:mmtt");

参照: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

于 2013-05-02T09:39:19.347 に答える