如何将java.util.Date转换为soap支持的日期格式;yyyy-MM-dd';T';HH:mm:ss“;带区域id
我正在处理这样一种情况:我希望将java.util日期转换为具有特定区域(欧洲/布鲁塞尔)的soap支持格式 我尝试使用Java8区域id特性,但它似乎只适用于即时日期如何将java.util.Date转换为soap支持的日期格式;yyyy-MM-dd';T';HH:mm:ss“;带区域id,java,soap,Java,Soap,我正在处理这样一种情况:我希望将java.util日期转换为具有特定区域(欧洲/布鲁塞尔)的soap支持格式 我尝试使用Java8区域id特性,但它似乎只适用于即时日期 ZoneId zoneId = ZoneId.of("Europe/Brussels"); ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(), zoneId); GregorianCalendar calendar
ZoneId zoneId = ZoneId.of("Europe/Brussels");
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),
zoneId);
GregorianCalendar calendar = GregorianCalendar.from(zonedDateTime);
String xmlNow = convertToSoapDateFormat(calendar);
calendar.add(Calendar.MINUTE, 61);
String xmlLater = convertToSoapDateFormat(calendar);
//Method for soap conversion
private String convertToSoapDateFormat(GregorianCalendar cal) throws DatatypeConfigurationException {
XMLGregorianCalendar gDateFormatted2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND),
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
return gDateFormatted2.toString();// + "Z";
}
我想让我们把这个日期(2002-02-06)转换成这个SOAP格式2002-02-06T08:00:00我不确定这是否是您想要的答案,所以如果我误解了您的问题,请告诉我。然后我将删除答案 您可以使用
SimpleDataFormat
类来实现您的目标。通过创建格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
然后使用以下调用设置日期格式:
df.format(date);
可以将SimpleDataFormat类与setTimezone方法一起使用
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdfAmerica = new SimpleDateFormat("dd-MM-yyyy'T'HH:mm:ss");
sdfAmerica.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
String sDateInAmerica = sdfAmerica.format(new Date());
System.out.println(sDateInAmerica);
}
}
java.time
我尝试使用Java8区域id特性,但它似乎可以很好地与
仅限即时约会
ZoneId zoneId = ZoneId.of("Europe/Brussels");
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),
zoneId);
GregorianCalendar calendar = GregorianCalendar.from(zonedDateTime);
String xmlNow = convertToSoapDateFormat(calendar);
calendar.add(Calendar.MINUTE, 61);
String xmlLater = convertToSoapDateFormat(calendar);
//Method for soap conversion
private String convertToSoapDateFormat(GregorianCalendar cal) throws DatatypeConfigurationException {
XMLGregorianCalendar gDateFormatted2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND),
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
return gDateFormatted2.toString();// + "Z";
}
使用java.time,Java8附带的现代java日期和时间API,包括ZoneId
,当然是推荐的方法。而且效果很好。我无法从你的问题中看出你受到了什么打击。如果我理解正确,DateTimeFormatter.ISO\u OFFSET\u DATE\u TIME
将为您提供SOAP XML所需的格式
ZoneId zoneId = ZoneId.of("Europe/Brussels");
ZonedDateTime zdtNow = ZonedDateTime.now(zoneId);
String xmlNow = zdtNow.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
ZonedDateTime zdtLater = zdtNow.plusMinutes(61);
String xmlLater = zdtLater.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println("Now: " + xmlNow);
System.out.println("Later: " + xmlLater);
刚才我运行这段代码时,输出是:
你好@Jannik,谢谢你的回复。我已经尝试过同样的方法,但它确实不能以所需的格式为我获取日期。实际上,它对语法没有任何影响。它创建的结果与您的
convertToSoapDateFormat
函数相同,我认为这就是目标?您应该避免SimpleDateFormat
。那门课是出了名的麻烦和过时。我想您是在寻找DateTimeFormatter.ISO\u OFFSET\u DATE\u TIME
来自java.TIME,这是一种现代java日期和时间API,它也是ZoneId
和zoneDateTime
的来源。您代码中注释过的+'Z'
似乎表明您希望字符串中有UTC偏移量。是这样吗?欧洲/布鲁塞尔的抵销?可能重复