有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何转换java。util。日期到soap支持的日期格式“yyyyMMdd'T'HH:mm:ss”,带区域id

我正在处理一个我想要转换java的情况。将日期转换为特定区域的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


共 (3) 个答案

  1. # 1 楼答案

    爪哇。时间

    I tried using Java 8 zone id feature but it seems it works well with instant dates only.

    使用java。时间,一种现代的Java日期和时间API,由Java8推出,包括ZoneId,当然是推荐的方法。而且效果很好。我无法从你的问题中看出你受到了什么打击。如果我理解正确,DateTimeFormatter.ISO_OFFSET_DATE_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);
    

    刚才我运行这段代码时,输出是:

    Now:   2019-10-21T13:56:37.771+02:00
    Later: 2019-10-21T14:57:37.771+02:00
    
  2. # 2 楼答案

    我不确定这是否是你想要的答案,所以如果我误解了你的问题,请告诉我。然后我会删除答案

    您可以使用SimpleDateFormat类来实现您的目标。用by创建格式

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    

    然后使用以下调用设置日期格式:

    df.format(date);
    
  3. # 3 楼答案

    可以将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);
          }
        }