簡體   English   中英

C#:傳遞給前端的日期時間格式錯誤

[英]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.KindLocalUnspecified ,則在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM