Java функция для преобразования даты без времени в строку времени date8601 - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно написать функцию java для SAP PI, которая возвращает строку для моего сопоставления XML в формате: гггг-мм-дд T чч: мм: сс (например, 2018-08-15T00:00:00), даже если мое поле источника просто поле даты без времени (например, 2018-08-15).

Я пробовал SimpleDateFormat класс Java, но не могу заставить его работать. Есть ли простой способ сделать это?

В предложенных постах (ответы / дубликаты / ссылки) я не смог найти то, что искал. Полагаю, я не достаточно ясно изложил проблему, но дело в том, что я получаю дату из исходного XML (SAP PO) и мне нужно преобразовать ее в дату ISO 8601 в целевом XML.

Благодаря Оле я придумал следующую функцию «для начинающих» (для полноты):

public String DH_FormatDateTimeStringB(String ndate, String npattern, Container container) throws StreamTransformationException{
//This function gets a date from the IDOC and returns it as a datetime string in ISO 8601 (ISO 8601 Representation of dates and times 
//in information interchange required. Ex: npattern = "yyyy-MM-dd")    

       DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern(npattern);
       LocalDate date = LocalDate.parse(ndate, formatterDate);

       //Convert date to datetime
       LocalDateTime localDateTime1 = date.atStartOfDay(); 

       //System.out.println(localDateTime1.toString());

       return localDateTime1.toString(); 
}

Так как теперь она принимает только дату без времени, возможно, подойдет «StartOfDay». Возможно, позже я настрою его, чтобы увидеть, есть ли часть времени в строке.

Спасибо всем за помощь!

1 Ответ

0 голосов
/ 05 июля 2018
    String dateStringFromSapPo = "2018-08-15";
    LocalDate date = LocalDate.parse(dateStringFromSapPo);
    LocalDateTime dateTime = date.atStartOfDay();
    String dateTimeStringForSapPi = dateTime.toString();
    System.out.println("String for SAP PI: " + dateTimeStringForSapPi);

Это печатает:

Строка для SAP PI: 2018-08-15T00: 00

У него нет секунд, но он соответствует стандарту ISO 8601, поэтому должен работать в ваших XML и SAP. Если это не так, вам нужно использовать явный форматер:

    DateTimeFormatter dateTimeFormatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
    String dateTimeStringForSapPi = dateTime.format(dateTimeFormatter);

Теперь также появляются секунды:

Строка для SAP PI: 2018-08-15T00: 00: 00

Кроме того, меня немного беспокоит возможность дать вам строку даты-времени без часового пояса или смещения. Это не момент времени, и, чтобы интерпретировать его как единое целое, SAP придется использовать часовой пояс. Только если вы уверены, что он выбирает намеченный, у вас все хорошо. Если нет, то мне жаль, что я не могу сказать вам решение.

Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time

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