Зависит ли форматирование даты от локали пользователя и календарной системы? - PullRequest
2 голосов
/ 29 августа 2009

Мне кажется, этот вопрос очень общий для всех программистов на всех языках. Это несколько размыто. Во-первых, есть локали, которые содержат информацию о культуре и другие вещи. Я полагаю, что эти объекты локали также инкапсулируют информацию о форматировании даты и времени, то есть, как отображать дату в стандарте Юникод. Вот так, например: "гггг-ММ-дд'ТХХ: мм: ссЗ". В каждой стране могут быть свои собственные правила форматирования даты и времени, поэтому мы все рады языкам, а пользователи наших приложений форматируют дату + время в соответствии с тем, что обычно в их регионе.

Но теперь действительно ужасная часть. Есть календари. Разные календари. Григорианский, как в США, Европе и некоторых других странах, но есть и еврейские, еврейские и мусульманские календари и многое другое. Теперь эти календари, конечно, разные. Они делят период времени года на единицы различной длины, у некоторых может быть 13 месяцев, у других могут быть только фазы луны вместо понедельника, вторника, среды и так далее. Я действительно не знаю, но я знаю, что некоторые из них кажутся очень странными для тех, кто привык к григорианскому календарю.

Но теперь размыто: кто на самом деле влияет на форматирование даты и времени? Язык? Календарная система? И то и другое? И говорит ли локаль, какую систему календаря обычно использовать? Как система календаря влияет на локаль и наоборот?

Я почти весь день искал эту тему, и она кажется трудной, как огромный кирпич.

Ответы [ 3 ]

2 голосов
/ 29 августа 2009

В типичной ОС будут подпрограммы даты, использующие григорианский календарь в соответствии с международным соглашением.

Локаль определит, как будет форматироваться информация о дате и на каком языке.

Это не останавливает использование других календарных систем независимо от функций даты ОС, но разве международная торговля не требует, чтобы мы согласовали общий календарь?

1 голос
/ 29 августа 2009

Пользователь может быть из одной области, где ему нравится использовать определенную календарную систему, но его локаль отличается из-за того, что он находится на удаленном рабочем месте или чем-то еще.

Существуют сотни подобных случаев, к которым люди должны обратиться, если им нужно пуленепробиваемое форматирование календаря.

0 голосов
/ 29 августа 2009

Я попытаюсь объяснить, как это работает в .Net framewrk

Значение, хранящееся в переменной DateTime, представляет собой количество тиков с определенного дня. Это не зависит от используемого календаря. то есть сегодня будет иметь одинаковое значение независимо от календаря.

В культуре содержится информация как о строке формата, так и о календаре, который будет использоваться при печати даты.

Когда вы просите систему отформатировать строку, она сначала делает что-то вроде:

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");

Правильный путь либо

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

или

dt.ToString("s");

Последний работает, потому что фреймворк автоматически игнорирует культуру для спецификатора формата "s" (и некоторых других).

...