Как преобразовать java.util.Date в поддерживаемый мылом формат даты "гггг-ММ-дд'ТХЧ: мм: сс" с идентификатором зоны - PullRequest
0 голосов
/ 18 октября 2019

Я имею дело с ситуацией, когда я хочу преобразовать дату java.util в формат, поддерживаемый мылом, с определенной зоной (Европа / Брюссель)

Я пытался использовать функцию идентификатора зоны Java 8, но, похоже, она работает хорошотолько с мгновенными датами.

    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 голос
/ 18 октября 2019

Вы можете использовать класс SimpleDateFormat с методом 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);
      }
    }
0 голосов
/ 21 октября 2019

java.time

Я пытался использовать функцию идентификатора зоны Java 8, но, похоже, она хорошо работает только с мгновенными датами.

Используя современный java.timeAPI даты и времени Java, который вышел с Java 8 и включает 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
0 голосов
/ 18 октября 2019

Я не уверен, что это ответ, который вы ищете, поэтому скажите мне, если я неправильно понял ваш вопрос. Затем я удалю ответ.

Вы можете использовать класс SimpleDateFormat для достижения своей цели. Создайте формат с помощью

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

, а затем отформатируйте дату следующим вызовом:

df.format(date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...