2009-08-29 4 views
2

この質問は、すべての言語のすべてのプログラマーにとって非常に一般的だと思います。 これはややぼやけています。まず、文化的な情報やその他のものをカプセル化するロケールがあります。これらのロケールオブジェクトは、日付と時刻の書式、つまり日付を表示する方法についての情報もUnicode標準でカプセル化していると思います。同様に、たとえば「yyyy-MM-dd'T'HH:mm:ssZ」。すべての国で独自の日付+時刻の書式設定ルールが使用されているため、ロケールについてはすべて満足しています。また、アプリのユーザーは日付+時刻を地域の通常の形式に設定します。日付の書式設定は、ユーザーのロケールとカレンダーシステムの両方に依存しますか?

しかし、今、本当に醜い部分。カレンダーがあります。異なるカレンダー。グレゴリオ暦はアメリカやヨーロッパなどいくつかの国に似ていますが、ヘブライ、ユダヤ、イスラム教徒のカレンダーなどもあります。これらのカレンダーはもちろん違います。彼らは、1年間の期間を異なる長さの単位に分け、あるものは13ヶ月、他のものは月曜日、火曜日、水曜日の代わりに月面だけを持つかもしれません。私は実際には分かっていませんが、グレゴリオ暦に慣れている人にはとても奇妙に見えることがあります。

今、ぼやけていること:誰が日付+時刻の書式設定に実際に影響しますか?ロケール?カレンダーシステム?どちらも?ロケールは、通常どのカレンダーシステムを使用するかを教えていますか?カレンダーシステムはどのようにロケールに影響を及ぼし、その逆をしますか?

私は今このトピックでほぼ一日中検索しています。それは巨大なレンガのように難しいようです。

答えて

1

ユーザーは、特定のカレンダーシステムを使用することを好むが、リモートジョブサイトなどにあるために彼のロケールが異なる1つのエリアにいる可能性があります。

防弾カレンダーの書式設定が必要な場合に、人々が対処する必要があるこのようなケースが数多くあります。

2

一般的なOSでは、国際条約によるグレゴリオ暦を使用する日付ルーチンがあります。

ロケールは、日付情報のフォーマット方法と言語を決定します。

これはOSの日付機能とは別に他のカレンダーシステムの使用を停止するものではありませんが、国際商取引では共通のカレンダーに同意する必要はありませんか?私はそれは、.NET framewrk

のDateTime変数に格納されている値にどのように動作するかを説明しようとするでしょう

+2

はい私はそれはそうだと思いますが、多分ユーザーは、to-doソフトウェアなどを使って文化的または宗教的な事柄を把握したいと思うかもしれません。 –

0

は、特定の日以来のチック数です。これは、使用されるカレンダーに依存しません。つまり、今日はカレンダーに関係なく同じ値になります。

カルチャには、日付を印刷するときに使用する書式文字列とカレンダーの両方に関する情報が含まれています。あなたはそれが最初のような何かをする文字列をフォーマットするシステムを頼むとき

int year = culture.Calendar.GetYear(dt); 
int month = culture.Calendar.GetMonth(dt); 
int day = culture.Calendar.GetDay(dt); 

年は、グレゴリオ暦が、他のカレンダーのために何か他のもので2009年になります。その後

、書式文字列があるため、次のコードは、ヘブライ語のロケールで正しいISO日付出力しないことを正しい順序等

の値を出力するために使用されます。

dt.ToString("yyyy-MM-dd'T'HH:mm:ssZ"); 

フレームワークは自動的に「S」の形式指定子(およびいくつかの他のもの)のための培養を無視するための正しい方法は、後者の作品

dt.ToString("yyyy-MM-dd'T'HH:mm:ssZ", CultureInfo.InvariantCulture); 

又は

dt.ToString("s"); 

のいずれかであります。