Добавление часов в строку, содержащую 00:00:00 - PullRequest
0 голосов
/ 09 мая 2019

Я собираюсь отправить переменную dateTime в API, для которого требуется строка с указанием времени и даты. Но я заметил, что есть разница во времени, потому что когда я отправляю эту переменную, она заканчивается двумя часами. Поэтому мне нужно добавить 2 часа к переменной времени.

Я попытался разделить переменную времени, проанализировал первый элемент в int и добавил 2, а затем отформатировал в String и т. Д., Но это кажется чрезмерно длинным. Есть ли более простой способ? Я пытался выяснить, как работать с объектами времени и устанавливать дату и время, но я знаю только, как установить текущее время, чего я не хочу делать. Код ниже содержит необходимые значения.

String date = "2019-05-09";
String time = "10:00:00";
String dateTime = (date + "T" + time + "Z");

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Есть ли более простой способ?

Да, используйте современные java.time классы.

Видимо, вы пытаетесь сообщить момент 10:00 в тот день в UTC.Z в вашем примере кода означает UTC, произносится «Зулу».

Для этого используйте OffsetDateTime со смещением, заданным константой ZoneOffset.UTC.

LocalDate ld = LocalDate.parse( "2019-05-09" ) ;
LocalTime lt = LocalTime.parse( "10:00:00" ) ;
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;

Очевидно, вы хотите отправить это значение в виде строки в стандартном формате ISO 8601 .Эти форматы по умолчанию используются в классах java.time при разборе / генерации строк.

String output = odt.toString() ;

Вы не можете точно объяснить, как и где возникает это 2-часовое расхождение.Я предполагаю, что вы видите результат после того, как была сделана настройка от UTC до некоторого часового пояса.Если это так, у вас нет проблем .

Если два человека звонят по телефону, в часовых поясах с интервалом в два часа, если они одновременно смотрят вверх, чтобы прочитать текущее время с часов на соответствующей стене, один человек увидит 10:00, а другой увидит 12:00.Тот же самый момент, та же самая точка на временной шкале, другое время настенных часов.

Это можно проверить, применив ZoneId для предполагаемого часового пояса, чтобы увидеть значение времени настенных часов в результирующем объекте ZonedDateTime.

ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;  // Same moment, same point on the timeline, different wall-click time. 
0 голосов
/ 09 мая 2019

Этот метод может дать вам полезные советы. Выходные данные: 2019-05-09 16: 05

public static void main(String[] args) {

LocalDateTime localDateTime = LocalDateTime.now().plusHours(2);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(localDateTime.format(formatter));
}
...