Groovy 日期和时区格式
Groovy Date & TimeZone formatting
我正在使用此 groovy / java 编码将 UTC 转换为 CET:
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;
}
你可以去:
//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
当 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();
在 Groovy 中,您可能会发现添加 dateUtil.nullSafeFormat 可能效果很好。
但仅供参考,这是另一种使用 maybeNull?.with { it.whatever() } ?: ""
的方法,它可以很好地避免将 null 传递给 DateFormat:
Map<String,String> getStuff(def json) {
DateTimeFormatter df = DateTimeFormatter.ISO_LOCAL_DATE
[oneThing: json?.some?.path,
someLocalDate: json?.some?.big?.path?.myDate?.with { df.format(it) } ?: "",
keepGoing: json?.more?.stuff?.with { [lastName, firstName]?.join(' ') },
...]
你可以看到我对空值检查有点过分了,但既然如此简单,为什么不呢!
我正在使用此 groovy / java 编码将 UTC 转换为 CET:
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;
}
你可以去:
//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
当 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();
在 Groovy 中,您可能会发现添加 dateUtil.nullSafeFormat 可能效果很好。
但仅供参考,这是另一种使用 maybeNull?.with { it.whatever() } ?: ""
的方法,它可以很好地避免将 null 传递给 DateFormat:
Map<String,String> getStuff(def json) {
DateTimeFormatter df = DateTimeFormatter.ISO_LOCAL_DATE
[oneThing: json?.some?.path,
someLocalDate: json?.some?.big?.path?.myDate?.with { df.format(it) } ?: "",
keepGoing: json?.more?.stuff?.with { [lastName, firstName]?.join(' ') },
...]
你可以看到我对空值检查有点过分了,但既然如此简单,为什么不呢!