2016-07-15 91 views
1

我有一个带偏移量的Json日期。我需要将其转换为java。将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

你可以发布你在JSON中的实际日期值的几个例子吗? – Mena

+0

@Mena:我已经更新了我的问题。请检查 – mattymanme

回答

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 
    } 
} 
+0

这不适用于json日期格式的日期'/ Date(1463667774000)/'。我在else部分添加了处理。非常感谢 – mattymanme

+0

@mattymanme更好地处理模式和有条件使用。让我试着编辑我的答案 – Mena

+0

谢谢。那太好了。 :) – mattymanme