前言
在 .NET Framework 4.8 中,当你看到类似 /Date(1754548600000)/ 这样的时间表示时,这通常是 JSON 序列化后的 DateTime 格式,特别是使用了旧版的 JavaScriptSerializer 或早期的 JSON.NET 版本。
时间戳格式
解释:
/Date(1754548600000)/ 是一个基于 Unix 时间戳的表示法- 括号中的数字
1754548600000 是从 1970-01-01 00:00:00 UTC 开始的毫秒数
如何转换这个时间戳:
1. 在 C# 中转换:
long timestamp = 1754548600000;
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(timestamp)
.ToLocalTime();
Console.WriteLine(dateTime);
2. 在 JavaScript 中转换:
var timestamp = 1754548600000;
var date = new Date(timestamp);
console.log(date);
3. 手动计算:
这个特定的时间戳 1754548600000 对应的是:
- UTC 时间:2025-08-08 01:36:40
- 北京时间(UTC+8):2025-08-08 09:36:40
如何避免这种格式:
如果你希望返回更易读的日期格式,可以考虑:
- 使用 JSON.NET (Newtonsoft.Json):
JsonConvert.SerializeObject(yourObject, Formatting.Indented);
- 在 Web API 中配置 JSON 格式化:
config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling
= DateFormatHandling.IsoDateFormat;
- 使用 System.Text.Json (.NET Core 3.0+):
JsonSerializer.Serialize(yourObject, new JsonSerializerOptions {
WriteIndented = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});
这种 /Date()/ 格式是早期 ASP.NET 的默认格式,现代应用通常会使用 ISO 8601 格式(如 “2025-08-08T01:36:40Z”)来代替。
带T格式
如果你希望去掉时间中间的 T,使格式变成 2025-08-07 14:36:40(空格分隔),可以使用以下方法:
方法 1:使用 ToString() 自定义格式化
在返回数据前,手动格式化 DateTime 字段:
var result = new
{
retCode,
retMsg,
pageIndex,
pageSize,
rowsTotal,
data = data.Select(item => new
{
DateField = item.DateField.ToString("yyyy-MM-dd HH:mm:ss")
})
};
return Json(result, JsonRequestBehavior.AllowGet);
输出示例
{
"DateField": "2025-08-07 14:36:40"
}
方法 2:使用 Newtonsoft.Json 自定义序列化
如果你使用 Newtonsoft.Json,可以自定义 IsoDateTimeConverter 来修改格式:
1. 定义自定义转换器
public class CustomDateTimeConverter : IsoDateTimeConverter
{
public CustomDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
}
}
2. 在序列化时应用
var settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new CustomDateTimeConverter() }
};
return Content(
JsonConvert.SerializeObject(new
{
retCode,
retMsg,
pageIndex,
pageSize,
rowsTotal,
data
}, settings),
"application/json"
);
输出示例
{
"DateField": "2025-08-07 14:36:40"
}
方法 3:使用 System.Text.Json(.NET Core / .NET 5+)
如果使用 System.Text.Json,可以自定义 JsonSerializerOptions:
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
Converters = { new DateTimeConverter("yyyy-MM-dd HH:mm:ss") }
};
return Content(
JsonSerializer.Serialize(new
{
retCode,
retMsg,
pageIndex,
pageSize,
rowsTotal,
data
}, options),
"application/json"
);
自定义 DateTimeConverter
public class DateTimeConverter : JsonConverter<DateTime>
{
private readonly string _format;
public DateTimeConverter(string format) => _format = format;
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> DateTime.Parse(reader.GetString()!);
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
=> writer.WriteStringValue(value.ToString(_format));
}
输出示例
{
"DateField": "2025-08-07 14:36:40"
}
总结
| 方法 | 适用场景 | 示例输出 |
|---|
ToString("yyyy-MM-dd HH:mm:ss") | 手动格式化 | 2025-08-07 14:36:40 |
Newtonsoft.Json + IsoDateTimeConverter | 全局 JSON 配置 | 2025-08-07 14:36:40 |
System.Text.Json + DateTimeConverter | .NET Core / 5+ | 2025-08-07 14:36:40 |
推荐方法:
- 如果只是少量字段,直接
ToString("yyyy-MM-dd HH:mm:ss") 最简单。 - 如果整个项目需要统一格式,使用
Newtonsoft.Json 自定义 DateTimeConverter。 - 如果是
.NET Core / .NET 5+,优先用 System.Text.Json。
这样可以确保返回的 JSON 时间格式不带 T,而是用空格分隔日期和时间。
转自https://blog.csdn.net/lmy_520/article/details/150498328
该文章在 2026/2/10 16:28:52 编辑过