c#:传递到前端的日期时间格式错误

wqlqzqxt  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(351)

因此,我从后端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;
}

这个 DateTime 属性返回的值 Controller 他错过了 Z 最后。
返回值为: 2021-07-27T05:23:41.937 这是错误的,因为当我在javascript中解析它时,它被视为本地日期时间。当我加上 Z 最后( 2021-07-27T05:23:41.937Z )那么这是对的。javascript的日期解析为我提供了正确的值。
如何从后端(c#)修复正确的解析值?

qlvxas9a

qlvxas9a1#

我建议使用newtonjson:
将包添加到项目中

<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" 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"
        });
      });

  ...
}
e1xvtsh3

e1xvtsh32#

听起来问题出在datetime对象的范围内 Kind ,而不是序列化。
如果 DateTime.Kind 要么 LocalUnspecified ,在iso8601中将其序列化将忽略时区信息(在您的示例中,z表示utc)。
要解决此问题,请首先尝试指定 DateTime 在返回数据之前。请参见以下内容:https://docs.microsoft.com/en-us/dotnet/api/system.datetime.specifykind?view=net-5.0.
如果这样做有效,请检查您的服务,并查看您是否正确解释返回的数据以填充属性 Sales.DateCreated ,并确保这是utc格式。

ibrsph3r

ibrsph3r3#

如果要在后端对其进行更改,请在sales类中创建另一个属性,如string和 public string DateCreatedFormated => DateCreated.ToString(format); 其中“格式”是本文中的一个。
我建议使用“u”格式。

相关问题