我有一个带偏移量的Json日期。我需要将其转换为java。
Edm.DateTime
"/Date(<ticks>["+" | "-" <offset>)/"
<ticks> = number of milliseconds since midnight Jan 1, 1970
<offset> = number of minutes to add or subtract
使用下面复制的answer,我可以将此日期转换为Java。但是,这不考虑偏移分量。有没有更简单的方法来解决偏移。
Date date = new Date(Long.parseLong(jsonDate.replaceAll(".*?(\\d+).*", "$1")));
以下是我以json日期格式获取的一些字符串日期
/日期(1463667774000 + 0400)/
/日期(1463667774000-5300)/
下面的计划和结果
str = "/Date(1463667774000-9000)/";
date = new Date(Long.parseLong(str.replaceAll(".*?(\\d+).*", "$1")));
System.out.println("1st "+ date);
1st Thu May 19 19:52:54 IST 2016
有人可以帮忙吗?
答案 0 :(得分:1)
以下是有关如何解析自定义日期的示例。
// test value
String[] jsonDates = {"/Date(1463667774000-9000)/","/Date(1463667774000)/", "/Date(1463667774000+0400)/"};
// | preceded by "("
// | | group 1: timestamp
// | | | optional group 2: "+" or "-"
// | | | | optional group 3
// | | | | (within group 2):
// | | | | minutes
// | | | | | followed by ")"
Pattern p = Pattern.compile("(?<=\\()(\\d+)(([-+])(\\d+))?(?=\\))");
for (String jsonDate: jsonDates) {
Matcher m = p.matcher(jsonDate);
// matching pattern...
if (m.find()) {
// found: parsing timstamp
long timestamp = Long.parseLong(m.group(1));
Integer minutes = null;
Boolean addOrSubstract = null;
if (m.group(2) != null) {
// parsing sign
addOrSubstract = "+".equals(m.group(3));
// parsing minutes
if (m.group(4) != null) {
minutes = Integer.parseInt(m.group(4));
}
}
// initializing calendar
Calendar c = Calendar.getInstance();
c.setTime(new Date(timestamp));
// adding/removing minutes if parsed
if (minutes != null) {
c.add(
Calendar.MINUTE,
addOrSubstract != null ?
(addOrSubstract ? minutes : -minutes) : 0
);
}
Date date = c.getTime();
System.out.println(date);
}
// not matched, different format
else {
// TODO error
}
}