UTC时间与本地时间转换问题
using System.Text.Json; using System.Text.Json.Serialization; namespace NDTInspHubCore.WebAPI.Converters { /// <summary> /// UTC时间到本地时间的转换器 /// </summary> public class UtcToLocalDateTimeConverter : JsonConverter<DateTime> { /// <summary> /// 读取JSON并转换为UTC时间 /// </summary> public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.Parse(reader.GetString()!).ToUniversalTime(); } /// <summary> /// 将UTC时间转换为本地时间并写入JSON /// </summary> public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")); } } /// <summary> /// UTC时间到本地时间的转换器(可空) /// </summary> public class UtcToLocalNullableDateTimeConverter : JsonConverter<DateTime?> { /// <summary> /// 读取可空JSON并转换为UTC时间 /// </summary> public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) { return null; } return DateTime.Parse(reader.GetString()!).ToUniversalTime(); } /// <summary> /// 将可空UTC时间转换为本地时间并写入JSON /// </summary> public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) { if (value.HasValue) { writer.WriteStringValue(value.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")); } else { writer.WriteNullValue(); } } } }
import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import timezone from 'dayjs/plugin/timezone' dayjs.extend(utc) dayjs.extend(timezone) export const formatUTCTime = (time) => { return dayjs.utc(time).local().format('YYYY-MM-DD HH:mm:ss') } export const formatLocalTime = (time) => { return dayjs(time).format('YYYY-MM-DD HH:mm:ss') } export const convertLocalToUTC = (time) => { return dayjs(time).utc().format('YYYY-MM-DD HH:mm:ss') }
program.cs
.AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = false; options.JsonSerializerOptions.Converters.Add(new UtcToLocalDateTimeConverter()); options.JsonSerializerOptions.Converters.Add(new UtcToLocalNullableDateTimeConverter()); });
/// <summary> /// 配置映射关系 /// </summary> public class AutoMapperConfig : Profile { /// <summary> /// 配置映射关系 /// </summary> public AutoMapperConfig() { // 全局时间转换:UTC到本地时间 CreateMap<DateTime, DateTime>().ConvertUsing(d => d.ToLocalTime()); CreateMap<DateTime?, DateTime?>().ConvertUsing(d => d.HasValue ? d.Value.ToLocalTime() : (DateTime?)null); } }
API 返回序列化 json 时处理,在.NET Core的JSON全局转换中,系统识别UTC时间的关键在于DateTime结构的Kind属性及数据传输的隐式约定

浙公网安备 33010602011771号