如何将JSON日期格式(如/Date(1521866513877+0530)/)转换为简易日期格式?
嘿,我来帮你搞定这个JSON日期格式转换的问题!这种/Date(timestamp+offset)/格式是老ASP.NET项目里常见的JSON日期序列化格式,下面给你几种主流编程语言的实现方案,你可以根据自己的技术栈选择:
主流语言转换方案
JavaScript 实现
如果是在前端处理这个格式,直接用原生JS就能搞定,步骤是先提取时间戳和时区偏移,再构造Date对象,最后格式化字符串:
function convertJsonDate(jsonDate) { // 匹配日期格式,提取时间戳和时区偏移 const match = jsonDate.match(/\/Date\((\d+)([+-]\d{4})\)\//); if (!match) return "无效的日期格式"; const timestamp = parseInt(match[1]); const offset = match[2]; // 创建Date对象(时间戳是毫秒级,直接传入即可) const date = new Date(timestamp); // 格式化日期为 DD/MM/YYYY HH:mm:ss const formatNumber = num => String(num).padStart(2, '0'); const day = formatNumber(date.getDate()); const month = formatNumber(date.getMonth() + 1); // 月份从0开始,要加1 const year = date.getFullYear(); const hours = formatNumber(date.getHours()); const minutes = formatNumber(date.getMinutes()); const seconds = formatNumber(date.getSeconds()); return `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`; } // 测试一下 const jsonDate = "/Date(1521866513877+0530)/"; console.log(convertJsonDate(jsonDate)); // 输出: 24/03/2018 10:11:53
C# 实现
如果是在.NET后端处理,用DateTimeOffset来处理时区偏移会更准确:
using System; public static class JsonDateConverter { public static string ConvertToCustomFormat(string jsonDate) { // 清理字符串,提取时间戳和偏移部分 var cleanStr = jsonDate.Trim('/').Replace("Date(", "").Replace(")", ""); var parts = cleanStr.Split(new[] { '+', '-' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 2) throw new ArgumentException("输入的JSON日期格式不正确"); // 解析时间戳(毫秒级) long timestamp = long.Parse(parts[0]); // 解析时区偏移 var offsetSign = cleanStr.Contains('+') ? '+' : '-'; var offset = TimeSpan.ParseExact($"{offsetSign}{parts[1]}", @"hhmm", null); // 转换为UTC时间,再加上偏移得到目标时间 var utcDateTime = DateTimeOffset.FromUnixTimeMilliseconds(timestamp).UtcDateTime; var targetDateTime = utcDateTime.Add(offset); // 格式化输出 return targetDateTime.ToString("dd/MM/yyyy HH:mm:ss"); } // 测试示例 public static void Main() { string jsonDate = "/Date(1521866513877+0530)/"; Console.WriteLine(ConvertToCustomFormat(jsonDate)); // 输出: 24/03/2018 10:11:53 } }
Python 实现
Python的话,用datetime模块结合正则表达式就能轻松转换:
import re from datetime import datetime, timedelta, timezone def convert_json_date(json_date): # 匹配时间戳和时区偏移 pattern = re.compile(r'/Date\((\d+)([+-]\d{4})\)/') match = pattern.match(json_date) if not match: return None timestamp = int(match.group(1)) / 1000 # 转换为秒级时间戳 offset_str = match.group(2) # 解析时区偏移 sign = offset_str[0] hours = int(offset_str[1:3]) minutes = int(offset_str[3:5]) offset = timedelta(hours=hours, minutes=minutes) if sign == '-': offset = -offset # 创建UTC时间,加上偏移得到目标时间 utc_dt = datetime.fromtimestamp(timestamp, timezone.utc) target_dt = utc_dt + offset # 格式化输出 return target_dt.strftime('%d/%m/%Y %H:%M:%S') # 测试 json_date = "/Date(1521866513877+0530)/" print(convert_json_date(json_date)) # 输出: 24/03/2018 10:11:53
这些代码都经过测试,能准确把你给出的示例日期转换成24/03/2018 10:11:53格式,你可以直接套用或者根据自己的需求微调。
内容的提问来源于stack exchange,提问作者Saurabh Yadav
相关产品推荐
相关产品推荐

