Я разрабатываю приложение, которое должно работать в нескольких регионах / часовых поясах. Я столкнулся с простой проблемой, но из-за того, как работает ABP, исправить это не так-то просто.
Проблема: ABP извлекает DateTimes из уже предварительно локализованной БД. Я хочу получить DateTimes как ISO YYYY-MM-DD HH: MM: SS, чтобы, когда момент. js получил данные на стороне клиента, у меня была общая отправная точка, то есть ISO. Оттуда я могу легко отформатировать до правильного языкового стандарта.
Я не хочу вручную указывать формат для каждого языкового стандарта с помощью оператора switch, а скорее создавать момент из ISO следующим образом:
var date = moment('2020-05-22 10:05').utc(); //works for an ISO date
var date = moment('22/05/2020 10:05').utc(); //Invalid date
var date = moment('22/05/2020 10:05', 'DD/MM/YYYY HH:mm').utc(); //Works but I don't want to have to manually specify this for each locale.
Но в настоящее время я не могу этого сделать, потому что возвращаемый DateTime всегда локализован. На форумах ABP и DotNetZero указано, что DateTime следует возвращать как UT C, но, похоже, это не так.
Application_start () в global.asax также содержит следующее определение:
Clock.Provider = ClockProviders.Utc;
Мой код контроллера (пример наименования)
var query = _someRepository.GetAll();
var rows = query.Select(a => new RowViewModel
{
Id = a.Id,
Name = a.Name,
CreatedBy = a.CreatorUser.Name + " " + a.CreatorUser.Surname,
CreatedOn = a.CreationTime //Returns 22/05/2020 10:05:05, I want 2020-05-22 10:05:05
});
Как я могу заставить ABP возвращаться как дату ISO из моего запроса контроллера / EF? Любая информация приветствуется.
В ответ на комментарий ниже это так выглядят данные DateTimeKind для возвращаемых дат: