2012-02-17 1 views
4

Мы создаем приложение, которое будет отправлено по всему миру при импорте и экспорте файлов разных форматов.Инвариантная культура

Мы должны использовать Инвариантную Культуру для этих стандартных файлов.

Однако инвариантная культура похожа на культуру EN-US, а не на стандартную международную литературу.

Это, как говорится, я бы хотел изменить по крайней мере формат даты для этой культуры. Но, следующий код генерирует исключение:

CultureInfo format = System.Globalization.CultureInfo.InvariantCulture; 
format.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; 
return format; 

Что бы правильный способ иметь IFormatProvider который форматирует любой вид переменные, но имеет международный способ написания даты?

+2

Инвариантная культура предназначена для предоставления вам * согласованного * способа представления данных, это не для отображения или представления данных в полу нейтральной культуре. Да, я также считаю, что даты ISO 8601 были бы хороши в этом отношении (в основном потому, что я не могу прочитать странный формат даты в США), но культура, которая является инвариантной, означает, что она не изменится. Когда-либо. – Joey

ответ

7

Инвариантная культура - это просто инвариантная. Вы не можете его изменить.

Эта культура предназначена для приложений .NET, которые должны сохранять данные таким образом, что они переносятся между культурами.

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

Насколько вы могли бы сделать, если бы вы действительно хотел, чтобы этот формат DateTime начинал определять новую культуру (возможно, если вы хотите, основываясь на инвариантной культуре).

var myStandardCulture = (CultureInfo)System.Globalization.CultureInfo.InvariantCulture.Clone(); 
myStandardCulture.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; 
return myStandardCulture; 

Минусом определении вашей собственной культуры, это другие приложения .NET, которые пытаются читать ваши файлы также должны быть рассказал обо всех ваших новых правил культуры, а не просто принимать правила InvariantCulture, встроенные в .NET

+0

Спасибо, но этот код вызывает исключение, поскольку параметр DateTimeFormat не может быть изменен, как я уже сказал в вопросе – Schiavini

+0

@Schiavini, вы уверены? Приложение для тестирования работало отлично. Мой код не совпадает с вашим кодом. Вызов Clone() должен предоставить вам CultureInfo с параметром IsReadOnly, равным «false». – MerickOWA

+0

Это правда, Clone() решает проблему. Я не видел этого из-за свитка. Ответ принят и +1! – Schiavini

1

На самом деле нет «стандартного» способа написания ... это не то, что означает Инвариантная культура. Поведение большинства методов формата по умолчанию заключается в использовании культурных настроек базовой операционной системы для форматирования даты, времени и номеров таким образом, который наиболее подходит тем, кто использует конкретный компьютер ... т.е. во время выполнения.

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

Принуждение к «одному международному» способу делать вещи будет сбивать с толку, поскольку они не привыкли видеть, что мы считаем стандартным на ежедневной основе.

Даты - еще один хороший пример путаницы, поскольку многие районы мира стандартизируют DD-MM-YYYY вместо MM-DD-YYYY, как в нашей стране.

+6

Фактически, что касается форматов даты, ISO 8601 (т. Е. YYYY-MM-DD) довольно универсален и понятен в большинстве стран мира - и, самое главное, без двусмысленности. – Joey

+2

, и это упрощает сортировку.MM/DD/YY очень смущает кого-либо за пределами США. – Schiavini