Отформатировать дату, используя текущую культуру потоков и двузначные числа для месяца и дня? - PullRequest
2 голосов
/ 16 августа 2011

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

Прямо сейчас я делаю это (dt - DateTime):

string s = dt.ToString(Thread.CurrentThread.CurrentCulture.DateTimeFormat);

Работает хорошо, однако в некоторых культурах месяцы и дни представлены только одной цифрой (тоже часами), например:

8/8/2011 8:57:59 AM

Я бы хотел, чтобы дата отображалась следующим образом:

08/08/2011 08:57:59 AM

Было бы легче читать (и красивее), когда есть список строк. Я видел, что есть метод String.format, который я мог бы использовать, но это делает текущую культуру неактуальной.

Есть ли способ достичь того, что я пытаюсь сделать?

Ответы [ 6 ]

3 голосов
/ 16 августа 2011

Предоставленное решение здесь может быть полезно.

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

1 голос
/ 16 августа 2011

Создайте пользовательскую культуру .

Основывайте ее на текущей культуре потока.

Измените параметры, которые хотите переопределить.

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

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

Соответствующие свойства для переопределения будут здесь .

0 голосов
/ 16 августа 2011
using System.Globalization;
private static CultureInfo defaultCulture = new CultureInfo("nl-NL");

public static CultureInfo GetCurrentCulture()
{
    List<CultureInfo> badCultures = new List<CultureInfo>();
    badCultures.Add(new CultureInfo("en-US"));

    if (badCultures.Contains(System.Threading.Thread.CurrentThread.CurrentCulture))
        return defaultCulture;
    return System.Threading.Thread.CurrentThread.CurrentCulture;
}
0 голосов
/ 16 августа 2011

Вы можете использовать

String.Format("{0:dd/MM/yyyy hh:MM PM ", yourDatetime)

Разделитель даты / (косая черта) и разделитель времени: (двоеточие) будут перезаписаны в символы, определенные в текущих DateTimeFormatInfo.DateSeparator и DateTimeFormatInfo.TimeSeparator.

РЕДАКТИРОВАТЬ: Забыли добавить параметр строки, необходимый для string.format

0 голосов
/ 16 августа 2011

Я полагаю, что по умолчанию это формат сервера - но что если вы попробуете указать "u" в качестве кода формата, который будет указывать год, тогда я думаю, что две цифры.

0 голосов
/ 16 августа 2011

Если вы хотите показать это на основе текущей культуры, то в чем проблема?Если вы хотите определенный формат, вы должны указать это.

string text = myDateTime.ToString("{0:[your format]}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...