我正在开发一个需要在多个语言环境/时区工作的应用程序。我遇到了应该是一个简单的问题,但由于 ABP 的工作方式,事实证明它不是那么容易修复。
问题:ABP 正在从已预先本地化的数据库中检索日期时间。我想将 DateTimes 作为 ISO YYYY-MM-DD HH:MM:SS 检索,以便当 moment.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 应返回为 UTC,但似乎并非如此。
global.asax 中的 Application_start() 还包含以下定义:
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 从我的 Controller/EF 查询中返回为 ISO 日期? 欢迎任何信息。
在回答下面的评论时,这是返回日期的 DateTimeKind 数据的样子: