我看过所有可能的答案,但是我还是很难弄清楚这件事。
我有一个存储在字符串中的Json日期。我想将其转换为Java日期,而不丢失时间信息。
同时,我也想将Java日期转换为Json日期字符串。
以下是我的代码:
String jsonDateString = "/Date(1295157600000-0600)/";
您的时间有两个部分:本地时间(以毫秒为单位)和时区偏移量(以小时和分钟为单位)。您需要解析它们并将它们“相加”以获取UTC毫秒数。
您可以使用以下函数执行此操作:
private static Pattern p = Pattern.compile("\\((\\d+)([+-]\\d{2})(\\d{2})\\)");
public static Date jd2d(String jsonDateString) {
Matcher m = p.matcher(jsonDateString);
if (m.find()) {
long millis = Long.parseLong(m.group(1));
long offsetHours = Long.parseLong(m.group(2));
long offsetMinutes = Long.parseLong(m.group(3));
if (offsetHours<0) offsetMinutes *= -1;
return new Date(
millis
+ offsetHours*60l*60l*1000l
+ offsetMinutes*60l*1000l
);
}
return null;
}
String jsonDate = "/Date("+date.getTime()+"+0000)/";
-0600
是什么意思?那是偏移量,它是所谓的“JSON日期”的一个完全被接受的部分。我多么讨厌这个术语!为什么会出现这种可怕的格式?ISO 8601或普通的毫秒时间戳有什么问题吗?哦,真恐怖!我的眼睛!! - Ray Toal