使用 Angular 调用 .net core web API 和 SQL 服务器数据库的日期问题

Date issues using Angular calling .net core web API and SQL Server database

我正在使用 Angular 和 primeng p-calendar 为我提供 select 过去日期的日期选择器。当我保存像 24 Nov 82 这样的日期时,它会将其保存在数据库中,如下所示。我相信我将日期保存为 UTC,但是当我保存 1943 年 11 月 19 日的日期时,它会将数据放到 18 日,因为它会占用一个小时。当我在 p 日历中加载 19 号时,它会将日期设置为 18 号而不是 19 号?

我是不是存错了?还是在我备份日期时需要考虑处理它?例如我需要使用 UTC 并将其转换为我的浏览器时区吗?

对于 1982 年 11 月 24 日,我在调试 angular 端时得到了这个:

对于 1943 年 11 月 18 日,我在调试 angular 端时得到了这个:

我听说过 dayjs,这能解决我的问题吗?

如有任何帮助,我们将不胜感激

问题出在 .net 核心网站 API,它正在重新调整没有 UTC 详细信息的日期。我实现了 DateTimeConveter,如下所示:

Formatting DateTime in ASP.NET Core 3.0 using System.Text.Json

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
    }
}


// in the ConfigureServices()
services.AddControllers()
    .AddJsonOptions(options =>
     {
         options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
     });

现在日期末尾有一个 Z(祖鲁语)来表示 UTC,例如

1943-11-18T23:00:00Z

而不是以前这样的日期

1943-11-18T23:00:00

日期现在在 p 日历中显示为 19 号而不是 18 号

问题是您使用的是 DateTime,它是隐式非时区感知的,而不是 DateTimeOffset。更改您的代码以使用后者,它将按预期工作。