Я передаю значение TextBox DateTime в Entity Model в API и форматирую дату и время в CultureInfo («en-GB», true) при сохранении данных в базе данных.
Он показывает день как месяц и месяц как дату.
Вот мой код:
IFormatProvider FormatDate = new System.Globalization.CultureInfo("en-GB", true);
Convert.ToDateTime(user.DOB, FormatDate);
Я передаю дату «08-04-2019» в формате дд-мм-гггг в user.DOB через API.
user.DOB, показывающий день = 4 и месяц = 8 вы можете проверить это на изображении ниже...
используйте DateTime.Parse
или DateTime.ParseExact
@ErikPhilips нет, DOB - это DateTime
Возможный дубликат DateTime и информация о культуре
@ЯнП. Нет, мой вопрос в другом. День и месяц отображались неправильно после форматирования.
Лучше всего передавать дату в формате UTC, а затем использовать параметр в запросе на вставку/обновление. Чтобы вы всегда работали с одним и тем же форматом. База данных заботится о своей культуре. То же самое для текстового поля.
@ShreyasPednekar Предоставленный код работает, как и ожидалось. Можете ли вы подтвердить, что ввод является строкой, его значение соответствует вашим ожиданиям?
Является ли user.DOB объектом DateTime или строкой? Если это уже DateTime, то почему вы используете метод Convert.ToDateTime()?
@Kami да, ввод представляет собой строку, и она поступает из приложения angular через API
@jdweng user.DOB уже является DateTime, но я хотел отформатировать его в CultureInfo («en-GB», true) при вставке записи в базу данных.
То, что вы сделали, абсолютно ничего не делает. Форматирование не сохраняется в переменной. DateTime хранится в виде числа, где вся часть числа представляет собой номер дня с 01.01.1, а дробь — часть 24 часов (0,25 — 6 часов, 0,5 — 12 часов и 0,75). составляет 18 часов). Изменение культуры, вероятно, меняет часовой пояс, что повлияет на часы и может привести к изменению дня.
@jdweng Хорошо, тогда скажи мне, почему DateTime.Parse(user.DOB.ToString(), FormatDate)
показывает правильный день и месяц, но Convert.ToDateTime(user.DOB, FormatDate)
показывает день и месяц местами?
С чего вы начали? Если бы вы не конвертировали, у вас не было бы никаких проблем. Преобразование из строки в DateTime использует локальные настройки компьютера (включая культуру). Ваш код мог переопределять локальные настройки, если вы запускали код в США, но данные были собраны в Англии. Если бы вы не конвертировали в первую очередь, не было бы никаких проблем, потому что дата была бы сохранена как число в UTF.
@ShreyasPednekar См. - docs.microsoft.com/en-us/dotnet/api/… . Если предоставленное значение является DateTime
, то возвращается указанный объект DateTime; фактическое преобразование не выполняется. Какой результат вы ожидаете от этой функции? user.DOB.ToString("dd/MM/yyyy")
будет недостаточно?
Вы также можете сделать что-то подобное.
var mydate = new DateTime(1976, 10, 13);
Не уверен, как это помогает, ОП спрашивает о замене даты и месяца при разборе даты!
Я решил свою проблему с помощью
преобразование public DateTime DOB { get; set; }
в public string DOB { get; set; }
в DTO
затем преобразуется в DateTime с форматом en-GB, а это в процедуру сохранения
IFormatProvider FormatDate = new System.Globalization.CultureInfo("en-GB", true);
Convert.ToDateTime(user.DOB, FormatDate);
Итак,
DOB
— это строка?