2017-08-23 3 views
-1

Je suis en train de convertir UTC CET avec ce codage Groovy/java:Date de Groovy & TimeZone mise en forme

import com.sap.gateway.ip.core.customdev.util.Message; 
import java.util.HashMap; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.TimeZone; 
import org.joda.time.*; 
import org.joda.time.format.*; 

def Message processData(Message message) { 

     def messageLog = messageLogFactory.getMessageLog(message); 
     def map = message.getHeaders(); 
     def value = map.get("dateOfBirth"); 
     if (value != null) { 
      String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 
      DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 
      DateTime dateTime = dtf.parseDateTime(value.toString()); 
      TimeZone tz = TimeZone.getTimeZone("CET"); 
      def result = dateTime.withZone(DateTimeZone.forTimeZone(tz)).toString(); 
      message.setHeader("dateOfBirth", result); 
      return message; 
     } 
} 

ce code fonctionne, UTC devient convertie en CET.

Mais je reçois un message d'erreur de toute façon et je ne sais pas pourquoi. Quelqu'un pourrait-il m'aider à me débarrasser de cette erreur?

Erreur:

javax.script.ScriptException: java.lang.Exception: 
java.lang.IllegalArgumentException: Invalid format: ""@ line 20 in script8.groovy, 
cause: java.lang.IllegalArgumentException: Invalid format: "" 

Merci à l'avance

Solution:

import com.sap.gateway.ip.core.customdev.util.Message; 
import java.util.HashMap; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.TimeZone; 
import org.joda.time.*; 
import org.joda.time.format.*; 

def Message processData(Message message) { 
     def messageLog = messageLogFactory.getMessageLog(message); 
     def map = message.getHeaders(); 
     def value = map.get("dateOfBirth"); 
     if (value?.trim() != "") { 
     String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 
     DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 
     DateTime dateTime = dtf.parseDateTime(value.toString()); 
     TimeZone tz = TimeZone.getTimeZone("CET"); 
     def result = dateTime.withZone(DateTimeZone.forTimeZone(tz)).toString(); 
     message.setHeader("dateOfBirth", result); 
    } 
    return message; 
} 
+1

Si le code fonctionne alors pourquoi vous recevez une erreur de syntaxe! Je n'ai pas pu avoir la question complètement! – nagendra547

+0

Essayez de déboguer et de vérifier si 'map.get (" dateOfBirth ")' ne retourne pas de valeur null dans certains cas. –

+0

bonne idée @SzymonStepniak, j'ai ajouté quelques vérifications, mais ne semble pas résoudre le problème. – zyrex

Répondre

1

votre code fonctionne correctement lorsque la variable value contient la valeur datetime correcte.

si je change value = "" (chaîne vide), j'ai la même exception:

java.lang.IllegalArgumentException: Invalid format: ""

@Grab(group='joda-time', module='joda-time', version='2.0') 

import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 
import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 
import java.util.TimeZone; 


def value = '2016-12-31T13:14:15+02'; 

String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 
DateTime dateTime = dtf.parseDateTime(value); 

TimeZone tz = TimeZone.getTimeZone("CET"); 
def result = dateTime.withZone(DateTimeZone.forTimeZone(tz)).toString(); 
+0

merci, c'était aussi l'idée de @SzymonStepniak. ceci n'inclut pas une solution mais m'amène à cela. Merci. – zyrex

2

Ici vous pouvez aller:

//Change the date and date formate as needed 
def inputDateString = "Wed Aug 23 00:00:00 UTC 2017" 
def inputDateFormat = "E MMM dd HH:mm:ss Z yyyy" 

def outputDateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
def outputTZ = TimeZone.getTimeZone('CET') 

def date = Date.parse(inputDateFormat, inputDateString) 
def convertedDate = date.format(outputDateFormat, outputTZ) 

println convertedDate 

Vous pouvez rapidement en ligne demo