import java.time.LocalDateTime
import java.time.temporal.ChronoUnit
LocalDateTime doy = LocalDateTime.now();
LocalDateTime d = LocalDateTime.of(doy.getYear(), doy.getMonth(), doy.getDayOfMonth(),0,0,0,0);
d.plus(-1,ChronoUnit.MONTHS);
return d.atZone(ZoneOffset.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSSX"))
d
содержит 2016-12-28T08:00:00.000Z
Я хочу, чтобы получить 2015-12-28T00:00:00.000Z
Я на Mac OSX java SE 8 1.8.0_45
также попытался java SE 8 1.8.0_72
Что я делаю неправильно?
Добавление более подробного объяснения здесь
Видимо часть моей проблемы связана с форматированием
ZonedDateTime doy = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(doy.getYear(), doy.getMonth(), doy.getDayOfMonth(),0,0,0,0),ZoneOffset.UTC);
System.out.println(d);
System.out.println(d.plus(-1,ChronoUnit.MONTHS));
System.out.println(d.minusMonths(1));
System.out.println(d.plus(-1,ChronoUnit.MONTHS).format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSSX")));
выход
2016-01-28T00:00Z
2015-12-28T00:00Z
2015-12-28T00:00Z
2016-12-28T00:00:00.000Z
Последняя должна быть 2015-12-28T00:00:00.000Z
System.out.println(d.minusMonths(1).format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSSX")));
дает тот же результат
См добавление выше –
Мой код получает то, чтобы добавить или удалить из строки, так что это тот же самый код делает d.plus (1, ChronoUnit.YEARS)) или d.plus (-1, ChronoUnit.MONTHS)), что в любом случае не является проблемой здесь, поскольку d.plus (-1, ChronoUnit.MONTHS)) дает тот же результат, что и d.minusMonth (1) –