Для начала воспользуйтесь новым API. Для секунд представьте концепцию правильного типа.
Например, java.util.Date
представляет моменты времени (а не даты; это очень неудачное название). Это определенно не представляет собой понятие «10 минут».
В подходящем (новом) API момент времени, выраженный человеческими терминами, будет ZonedDateTime
. Понятие 10 минут будет Duration
(длительности имеют установленное количество времени. Периоды более расплывчаты; месяц имеет переменную продолжительность и, таким образом, является периодом; 10 минут всегда равны время и, следовательно, продолжительность).
Duration d = Duration.ofMinutes(10);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse("2020-05-06 13:10:00", dtf);
Обратите внимание, что время ввода не имеет часового пояса и местоположения, включенного в него. Следовательно, LocalDateTime
- правильный тип для его представления.
Но это проблема: LDT не позволяют добавлять или удалять периоды / длительности. Например, в Амстердаме добавление часа ко времени «2020-03-29 01:30:00» приведет к ... «2020-03-29 03:30:00» - да, это ПОЯВЛЯЕТСЯ как 2 часа, но прошел всего 1 час. Это был именно тот момент, когда часы переводились на час вперед. Это показывает, почему невозможно добавлять или удалять единицы времени, не помещая их в контекст часового пояса, в котором мы находимся.
Таким образом, вы не можете делать здесь то, что хотите; вам нужно сначала «локализовать» его. Давайте продолжим:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("Europe/Amsterdam"));
ZonedDateTime modified = zdt.plus(d);
System.out.println(dtf.format(modified));
и напечатает 2020-05-06 13:20:00
, как вы хотели.