使用 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
。更改您的代码以使用后者,它将按预期工作。
我正在使用 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
。更改您的代码以使用后者,它将按预期工作。