2016-07-15 12 views
1

Ich habe ein JSON Datum mit Offset. Ich muss das in Java konvertieren.konvertieren Json Datum mit Offset zu Java Datum

Edm.DateTime

"/Date(<ticks>["+" | "-" <offset>)/" 

<ticks> = number of milliseconds since midnight Jan 1, 1970 

<offset> = number of minutes to add or subtract 

diese answer unten kopiert Verwendung, ich bin in der Lage, dieses Datum zu Java konvertieren. Dies berücksichtigt jedoch nicht die Offset-Komponente. Gibt es eine einfachere Möglichkeit, den Offset zu lösen?

Date date = new Date(Long.parseLong(jsonDate.replaceAll(".*?(\\d+).*", "$1"))); 

Im Folgenden sind einige String Termine, die ich im json Datumsformat bin immer

/Datum (1463667774000 + 0400)/

/Datum (1463667774000-5300)/

Programm und Ergebnis unter

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 

Kann jemand bitte helfen?

+0

Können Sie einige Beispiele für die tatsächlichen Datumswerte in Ihrem JSON posten? – Mena

+0

@Mena: Ich habe meine Frage aktualisiert. Bitte überprüfen Sie – mattymanme

Antwort

1

Hier finden Sie ein Beispiel zum Analysieren Ihrer benutzerdefinierten Daten.

// 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

dies funktioniert nicht für Daten in JSON-Datumsformat '/ Datum (1463667774000) /'. Ich habe die Handhabung für sie im else Abschnitt hinzugefügt. Vielen Dank – mattymanme

+0

@mattymanme besser im Muster zu behandeln und bedingt zu verwenden. Lassen Sie mich versuchen, meine Antwort zu bearbeiten – Mena

+0

Danke. Das wäre großartig. :) – mattymanme