[英]C#: Wrong DateTime format passed to front end
所以我從我的后端 API 返回一個日期值。
這是我的模型:
public class Sales {
....
public DateTime DateCreated {get;set;}
}
我從我的Controller
返回它:
[System.Web.Http.HttpGet]
public async Task<Sales> GetSales() {
.....
Sales s = await GetSalesForTheUser();
return s;
}
Controller
返回的DateTime
值在其末尾缺少Z
返回值是: 2021-07-27T05:23:41.937
這是錯誤的,因為當我在 Javascript 中解析它時,它被視為本地日期時間。 當我在它的末尾添加Z
( 2021-07-27T05:23:41.937Z
) 時,這是正確的。 從 Javascript 解析的日期給了我正確的值。
如何從后端 (C#) 修復正確的解析值?
聽起來問題出在 DateTime 對象的Kind
,而不是序列化中。
如果DateTime.Kind
是Local
或Unspecified
,則在 ISO8601 中對其進行序列化將省略時區信息(在您的情況下為 Z,表示 UTC)。
要解決此問題,請首先嘗試在返回數據之前指定DateTime
的類型。 請參閱此處: https : //docs.microsoft.com/en-us/dotnet/api/system.datetime.specifykind?view=net-5.0 。
如果Sales.DateCreated
,請檢查您的服務,看看您是否正確解釋了返回的數據以填充屬性Sales.DateCreated
,並確保這是 UTC。
我推薦使用 NewtonJson:
將包添加到您的項目中
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="..." />
您可以通過向 Startup.cs 添加一些配置來實現它:
public void ConfigureServices(IServiceCollection services)
{
...
// Configure controllers.
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.Add(new IsoDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ"
});
});
...
}
如果您想在后端更改它,請在您的 Sales 類中創建另一個屬性,例如字符串類型的“DataCreatedFormated”和public string DateCreatedFormated => DateCreated.ToString(format);
其中“格式”是本文中的一種。
我建議'u'格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.