2017-08-23 132 views
-1

我UTC转换为这个时髦/ Java代码CET:Groovy的日期和时区格式化

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; 
     } 
} 

此代码的工作,UTC是越来越转化为CET。

但是我仍然收到错误消息,我不知道为什么。有人能帮我摆脱这个错误吗?

错误:

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

在此先感谢

解决方案:

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

如果代码工作,为什么您收到语法错误!无法完全解决问题! – nagendra547

+0

尝试调试并检查map.get(“dateOfBirth”)在某些情况下是否不返回null值。 –

+0

好主意@SzymonStepniak,我已经添加了一些检查,但似乎没有解决问题。 – zyrex

回答

1

value变量包含正确的日期时间值时,您的代码正常工作。

如果我改变value = ""(空字符串),那么我有同样的异常:

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

谢谢,这也是@SzymonStepniak的想法。这不包括一个解决方案,但引导我。谢谢。 – zyrex

2

在这里,你可以去:

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

您可以快速地在线试用demo