ASP.NET C # MVC - изменение формата даты и времени непосредственно в БД или модели - PullRequest
3 голосов
/ 13 сентября 2009

Я изо всех сил пытаюсь найти простой способ изменить формат DateTime для моего поля таблицы.

У меня есть модель с именем Article с полем releaseDate, которое является DateTime

Мне удалось сделать это (визуально), преобразовав

Article.releaseDate.ToString("dd/MM/yy")

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

Любой простой способ изменить значение по умолчанию ("ММ / ДД / ГГ") на ("ДД / ММ / ГГ") ?

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 13 сентября 2009

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

<%@ Page UICulture="en" Culture="en-GB" %>

или глобально на всех страницах, добавив в ваш web.config

<globalization uiCulture="en" culture="en-GB" />

Обе изменят привязку модели DateTime к дд / мм / гггг, поэтому преобразование не требуется.

См. этот вопрос для получения дополнительной информации

Кодовый эквивалент

CultureInfo.CurrentUICulture.DateTimeFormat
 = CultureInfo.CurrentCulture.DateTimeFormat
 = new CultureInfo( "en-GB", false ).DateTimeFormat;
3 голосов
/ 13 сентября 2009

Да. Это конечно приятель :) 1001 *

попробуйте изменить КУЛЬТУРУ текущего потока. По умолчанию это занимает ОС системы. но вы можете переопределить это.

проверить это ...

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Вот хороший пост , объясняющий ....

НТН.

0 голосов
/ 13 сентября 2009

Ваша проблема здесь в том, что, поскольку компилятор видит только two digits/two digits/two digits в обоих случаях, он не может знать, что вы хотите day/month/year вместо month/day/year, пока он не попытается фактически выполнить приведение, и заметит, что ваше значение для месяц >= 12.

Вы можете решить эту проблему, разделив дату на / и добавив аргументы в «правильном» порядке к компилятору, например так:

string[] dateParts = input.Split("/");
int day; int month; int year;

// You could use a boolean variable here to double-check that all casts are successful
Int32.TryParse(dateParts[0], out day);
Int32.TryParse(dateParts[1], out month);
Int32.TryParse(dateParts[2], out year);

var output = new DateTime(year, month, day);

Если вы поместите это в отдельную функцию, вы можете использовать ее для поддержки обоих форматов:

DateTime releaseDate;
try
{
    // will throw exception if input is not in the default format
    releaseDate = new DateTime(input);
}
catch (InvalidFormatException ex)
{
    releaseDate = GetDateTimeFromNonStandardInput(input);
}
catch 
{
    throw; // or do whatever error handling you feel like.
}

Лично я бы написал GetDateTimeFromNonStandardInput() как метод расширения для класса DateTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...