C# Web API 前端传入参数时间为Utc
Web API 前端传入参数时间为Utc(时间相差8个小时)
1.在Program.cs
builder.Services.AddControllers().AddJsonOptions(options =>
{// 序列化时将时间转换为本地时间(北京时间)options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());// 或直接指定 DateTime 处理方式(根据需求选择)options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
2.将时间转化成自定义
public class DateTimeConverter : JsonConverter<DateTime>
{private readonly string _dateFormat = "yyyy-MM-dd HH:mm:ss"; // 自定义格式public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){// 反序列化:将字符串转换为本地时间(假设前端传递的是UTC或带时区的时间)if (DateTime.TryParse(reader.GetString(), out DateTime date)){// 若传递的是UTC时间,转换为本地时间(北京时间)if (date.Kind == DateTimeKind.Utc){return TimeZoneInfo.ConvertTimeFromUtc(date, TimeZoneInfo.Local);}return date;}return DateTime.Now;}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){// 序列化:将本地时间转换为指定格式字符串(避免默认UTC格式)writer.WriteStringValue(value.ToString(_dateFormat));}
}