ASP. NET ABP: вернуть ISO DateTime (Not Local) из БД - PullRequest
1 голос
/ 26 мая 2020

Я разрабатываю приложение, которое должно работать в нескольких регионах / часовых поясах. Я столкнулся с простой проблемой, но из-за того, как работает 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 для возвращаемых дат:

enter image description here

...