Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java.util.Date转换为soap支持的日期格式;yyyy-MM-dd';T';HH:mm:ss“;带区域id_Java_Soap - Fatal编程技术网

如何将java.util.Date转换为soap支持的日期格式;yyyy-MM-dd';T';HH:mm:ss“;带区域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

我正在处理这样一种情况:我希望将java.util日期转换为具有特定区域(欧洲/布鲁塞尔)的soap支持格式

我尝试使用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";
}

我想让我们把这个日期(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偏移量。是这样吗?欧洲/布鲁塞尔的抵销?可能重复