You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让javascriptdatetimeconverter()生成无时区的Microsoft风格日期格式?

实现无时区的JavaScript日期序列化格式

完全可以实现这个需求,你可以通过两种方式来去掉日期序列化结果中的时区部分:

方法一:自定义日期转换器

创建一个继承自JavaScriptDateTimeConverter的自定义转换器,重写WriteJson方法,直接生成无时区的日期格式:

public class NoTimeZoneDateTimeConverter : JavaScriptDateTimeConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value is DateTime date)
        {
            // 计算从1970-01-01 UTC到目标日期的毫秒数
            long timestamp = (long)(date.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
            writer.WriteRawValue($"\"/Date({timestamp})/\"");
        }
        else
        {
            base.WriteJson(writer, value, serializer);
        }
    }
}

使用时将自定义转换器加入序列化配置即可:

var settings = new JsonSerializerSettings();
settings.Converters.Add(new NoTimeZoneDateTimeConverter());
var serializedJson = JsonConvert.SerializeObject(yourDateData, settings);

方法二:正则替换现有输出

如果不想自定义转换器,也可以在序列化完成后,用正则表达式移除时区后缀:

var originalJson = JsonConvert.SerializeObject(yourDateData, new JavaScriptDateTimeConverter());
var noTimeZoneJson = Regex.Replace(originalJson, @"\/Date\((\d+)[+-]\d+\)\/", @"/Date($1)/");

这种方式更轻量化,适合快速调整输出格式,但要确保JSON结构中没有其他类似格式的字符串,避免误匹配。

两种方法都能生成和Microsoft JavaScriptSerializer一致的无时区日期格式"/Date(1667894400000)/"。

内容的提问来源于stack exchange,提问作者Brobic Vripiat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:55:19