ABP舊版本
abp默認是不使用mvc的時間格式,所以直接在AddMvc修改DateFormatString是不會生效的。需要先啟用mvc時間格式。Configuration.Modules.AbpAspNetCore().UseMvcDateTimeFormatForAppServices = true;
可以在任意一個項目的module的PreInitialize()方法中配置,不過還是推薦在Host項目或者MVC的module中配置,就是startup設置的DateFormatString在哪個項目就在哪個項目的module中配置。
這個更新是abp 3.8.1之后加的,之前的版本還是得用自定義ContractResolver的丑陋辦法
show code
xxWebHostModule.cs
public override void PreInitialize() { Configuration.Modules.AbpWebCommon().MultiTenancy.DomainFormat = _appConfiguration["App:ServerRootAddress"] ?? "http://localhost:22742/"; Configuration.Modules.AspNetZero().LicenseCode = _appConfiguration["AbpZeroLicenseCode"]; Configuration.Modules.AbpAspNetCore().UseMvcDateTimeFormatForAppServices = true;//就是這句,使用mvc時間格式 }
需要using Abp.AspNetCore.Configuration;
然后是startup.cs
ConfigureServices()方法里第一句
//MVC services.AddMvc(options => { options.Filters.Add(new CorsAuthorizationFilterFactory(DefaultCorsPolicyName)); }) .AddJsonOptions(options => options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss zz") .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
重點是.AddJsonOptions(options => options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss zz")
然后隨便找個controller寫個獲取時間的方法
public class DateLocal { public DateTimeOffset DateTimeOffset { get; set; } public DateTime DateTime { get; set; } public DateTimeOffset Local { get; set; } }
[HttpGet] public DateLocal GetLocalTime() { return new DateLocal { DateTimeOffset = DateTimeOffset.Now, DateTime = DateTime.Now, Local = DateTimeOffset.Now.ToLocalTime(), }; }
生效
Abp vNext
版本
abp vnext 1.1.2
.net core 3.1
除非.net 5,否則應該不會再有啥大的改動了(System.Text.Json替換不了NewtonsoftJon的話)
在HostModule的ConfigureServices方法里加上
Configure<MvcNewtonsoftJsonOptions>(options => { options.SerializerSettings.DateFormatString = "r";//對類型為DateTime的生效 }); Configure<AbpJsonOptions>(options => options.DefaultDateTimeFormat = "r"); //對類型為DateTimeOffset生效
需要using Volo.Abp.Json 和 Microsoft.AspNetCore.Mvc
和前端交互建議用"r"作為日期格式,即UTC時間,這樣前端可以直接new Date(),也可以自行按需替換為"yyyy-MM-dd"等之類的格式字符串
效果如下
其中CreationTime是Abp內置類型CreateAuditedEntityDto的屬性,類型是DateTime
BirthDay是自定義屬性,類型是DateTimeOffset,可見兩個都成功格式化了