java.time.LocalDateTime(也称为ZoneDateTime)。在减去1个月后返回一年失败,格式为
我正在这么做java.time.LocalDateTime(也称为ZoneDateTime)。在减去1个月后返回一年失败,格式为,java,Java,我正在这么做 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
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
System.out.println(d.minusMonths(1).format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSSX")));
我在mac OSX上JavaSE81.8.0\u45
也尝试了JavaSE81.8.0\u72
我做错了什么
在此处添加更多解释
显然,我的部分问题与格式有关
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
最后一个应该是2015-12-28:00:00.000Z
System.out.println(d.minusMonths(1).format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSSX")));
给出相同的结果您可以执行以下操作:
LocalDateTime doy = LocalDateTime.now();
LocalDateTime d = doy.minusYears(1);
然后
LocalDateTime d2 = d.minusMonth(1);
return d2;
来自API java 8():
返回此LocalDateTime的副本,其中包含指定数量的
减去年数
和d.d.
返回此LocalDateTime的副本,其中包含指定数量的
减去月份
您可以这样做:
LocalDateTime doy = LocalDateTime.now();
LocalDateTime d = doy.minusYears(1);
然后
LocalDateTime d2 = d.minusMonth(1);
return d2;
来自API java 8():
返回此LocalDateTime的副本,其中包含指定数量的
减去年数
和d.d.
返回此LocalDateTime的副本,其中包含指定数量的
减去月份
由于您想向后倒退一个月,因此您应该这样做,例如:
LocalDateTime d = LocalDateTime.of(2016, Month.JANUARY, 28, 0, 0, 0);
System.out.println(d);
System.out.println(d.minusMonths(1));
由于您想向后倒退一个月,因此您应该这样做,例如:
LocalDateTime d = LocalDateTime.of(2016, Month.JANUARY, 28, 0, 0, 0);
System.out.println(d);
System.out.println(d.minusMonths(1));
我想你是在找医生(…)。我从来没有用过“加号”法。我想你在找d。我从未使用过“加号”方法。我找到了解决问题的方法
ZonedDateTime doy = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(doy.getYear(), doy.getMonth(), doy.getDayOfMonth(),0,0,0,0),ZoneOffset.UTC);
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.appendValue(ChronoField.YEAR).append(DateTimeFormatter.ofPattern("-MM-dd'T'HH:mm:ss.SSSX"));
DateTimeFormatter formatter = builder.toFormatter();
System.out.println(d.plus(-1,ChronoUnit.MONTHS).format(formatter));
输出
2016-01-28T00:00Z
2015-12-28T00:00Z
2015-12-28T00:00Z
2016-12-28T00:00:00.000Z
2015-12-28T00:00:00.000Z
所以我猜模式的模式DateTimeFormatter.ofPattern(“YYYY-MM-dd'T:HH:MM:ss.SSSX”)
实际上,这种模式的格式化DateTimeFormatter.of(“yyyy-MM-dd'T:HH:MM:ss.SSSX”)
是有效的
该死
任何人都可以解释为什么我的考试昨天通过了,而不是今天,1月28日有什么特别的吗?我找到了解决问题的办法
ZonedDateTime doy = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(doy.getYear(), doy.getMonth(), doy.getDayOfMonth(),0,0,0,0),ZoneOffset.UTC);
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.appendValue(ChronoField.YEAR).append(DateTimeFormatter.ofPattern("-MM-dd'T'HH:mm:ss.SSSX"));
DateTimeFormatter formatter = builder.toFormatter();
System.out.println(d.plus(-1,ChronoUnit.MONTHS).format(formatter));
输出
2016-01-28T00:00Z
2015-12-28T00:00Z
2015-12-28T00:00Z
2016-12-28T00:00:00.000Z
2015-12-28T00:00:00.000Z
所以我猜模式的模式DateTimeFormatter.ofPattern(“YYYY-MM-dd'T:HH:MM:ss.SSSX”)
实际上,这种模式的格式化DateTimeFormatter.of(“yyyy-MM-dd'T:HH:MM:ss.SSSX”)
是有效的
该死
任何人都可以解释为什么我的考试是昨天通过的,而不是今天,1月28日有什么特别之处?YYYY是“年-周”样式日期的年值,如2006W52。如果所述周跨越年份边界,则可能会偏离纪年值+1或-1。看起来您选择了今年的最后一周
看
另请参见:yyy是“年-周”样式日期的年值,如2006W52所示。如果所述周跨越年份边界,则可能会偏离纪年值+1或-1。看起来您选择了今年的最后一周
看
另请参见:Actual LocalDateTime d=LocalDateTime.of(2016年1月28日,0日,0日,0日);系统输出打印ln(d);系统输出打印项数(d.plus(-1,ChronoUnit.MONTHS))系统输出打印项数(d.minus MONTHS(1));工作正常。实际上LocalDateTime d=LocalDateTime.of(2016年1月28日,0日,0日);系统输出打印ln(d);系统输出打印项数(d.plus(-1,ChronoUnit.MONTHS))系统输出打印项数(d.minus MONTHS(1));工作正常。请参见上面的加法。我的代码从字符串中获取要添加或删除的内容,因此它与执行d.plus(1,ChronoUnit.YEARS)或d.plus(-1,ChronoUnit.MONTHS))的代码相同,这在这里不是问题,因为d.plus(-1,ChronoUnit.MONTHS))给出的结果与d.minusMonth(1)相同请参见上面的加法。我的代码从字符串中获取要添加或删除的内容,因此它与执行d.plus(1,ChronoUnit.YEARS)或d.plus(-1,ChronoUnit.MONTHS))的代码相同,这在这里无论如何都不是问题,因为d.plus(-1,ChronoUnit.MONTHS))给出的结果与d.minusMonth(1)相同