2015-04-22 7 views
2

На моей локальной машине мой Thread.CurrentThread.CurrentCulture возвращает правильную локальную культуру (en-GB). Формат даты установлен на yyyy-MM-dd.C# Формат даты, не отображающий местный формат

В коде, когда я бегу:

value.ToShortDateString() 

он возвращает "6/2/2010" (M/D/YYYY).

Как я могу отобразить его в соответствии с местной культурой? Я не хочу жестко кодировать формат, так как приложение будет развернуто в разных странах, поэтому оно должно работать в соответствии с локальной настройкой ПК. Я также тестировал на en-US, и он отображает то же самое.

Значение моей переменной 'значение' является:

{6/2/2010 12:00:00 AM} 
    Date: {6/2/2010 12:00:00 AM} 
    Day: 2 
    DayOfWeek: Wednesday 
    DayOfYear: 153 
    Hour: 0 
    Kind: Unspecified 
    Millisecond: 0 
    Minute: 0 
    Month: 6 
    Second: 0 
    Ticks: 634110336000000000 
    TimeOfDay: {00:00:00} 
    Year: 2010 
+0

value.ToShortDateString() возвращает динамический формат только в зависимости от конфигурации локального рабочего стола. Проверьте мой ответ, чтобы получить больше объяснений. – mkkhedawat

+0

Я не понимаю ваш вопрос. Ты говоришь; ваш 'CurrentCulture' является' en-GB' и спрашивает: Как я могу отобразить его в соответствии с местной культурой? _. Вы уже делали это с помощью 'ToShortDateString'. Что именно вы хотите в итоге? В формате 'yyyy-MM-dd' вместо этого? И спецификатор 'm' - это минуты, спецификатор' M' - в течение нескольких месяцев. Спецификаторы формата чувствительны к регистру. –

+0

@Soner: ToShortDateString возвращает формат США 6/2/2010. я бы хотел, чтобы он вернулся в соответствии с местной культурой, то есть 2010-06-02. –

ответ

2

Просто позвоните ToString(), а не ToShortDateString() и указать формат даты:

DateTimeFormatInfo formatInfo = CultureInfo.CurrentUICulture.DateTimeFormat; 
    var value = DateTime.Now.ToString(formatInfo); 

Хотя ToShortDateString() должна быть культура чувствительных as per the documentation:

Значение текущей даты DateTim e объект форматируется с использованием шаблона, определенного свойством DateTimeFormatInfo.ShortDatePattern, связанным с текущей культурой потока. Возвращаемое значение совпадает с возвращаемым значением, указав стандартную строку формата даты «d» с помощью метода ToString (String).

Однако, если CurrentCulture и CurrentUICulture отличаются, они могут возвращать неправильный формат. Чтобы быть в безопасности, я использовал его в образце кода CurrentUICulture, поскольку он основан на настройках пользовательского интерфейса пользователя - например, Английский языковой пакет в американской системе и т. Д. И должен быть правильным.

+0

Tx - Вероятно, я должен был сказать это в вопросе, но он должен быть динамичным по культуре. Когда мы развертываем в других странах, мы не хотим, чтобы он был жестко закодирован. Я уточню вопрос. –

+0

@ user1208908 Обновлен ответ, чтобы принять это во внимание. – aevitas

+0

Я пробовал ваше решение, и оно возвращается «24/25/2012 2:43:01 PM», который по-прежнему является американским форматом. –

0

Укажите культуру в вашем ToString():

DateTime.Now.ToString(CultureInfo.CurrentCulture); 
+0

Решение возвращается «2/18/2014 12:00:00 AM». Все еще неправильный формат. –

1

ToShortDateString метод должен быть культура ВОСПРИИМЧИВ - формат использует регулируется DateTimeFormatInfo объекта текущей культуры. Вы проверили, что вы ожидаете?

(Это должно быть действительно комментарий, как это не однозначный ответ/фикс. - к сожалению, у меня нет достаточной репутации на комментарий)

+0

Это то, что я собирался отправить в соответствии с чтением этой [link] (https://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring%28v=vs.110%29.aspx). Имейте upvote для того чтобы получить вас на вашем пути к быть в состоянии прокомментировать ... – Wizard

+0

Cheers - очень оценено. – amcdermott

0

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

  • Если локальная конфигурация является 15/4/22 (дд гг/м /), выход будет 15/4/22
  • Если локальная конфигурация является 4/22/2015 (м/дд/гггг), выход будет 4/22/2015

локальная конфигурация может быть изменена в соответствии с датой изменения и настройки времени >> изменения формата календаря настройка >> дата изменения

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

+0

Ну, вот как это должно работать, и отчасти это причина вопроса. Он не показывает дату в этом формате. –

+0

Какую версию .net вы используете? Он работает точно так же, как описано у меня. – mkkhedawat

+0

Visual Studio Professional 2013 –

Смежные вопросы