我需要向 java 日期添加十进制月份数: -> 我可以使用此代码与 joda time api 来为日期添加自然的月份数。但是我如何向日期添加十进制月份数(例如 3.5)?
Date date = new Date();
DateTime dateTime = new DateTime(date);
dateTime = dateTime.plusMonths(3);
Date newDate = dateTime.toDate();
最佳答案
这将为您提供一个近似值。这是你能得到的最好的。
long oneMonthInNanos = ChronoUnit.MONTHS.getDuration().toNanos();
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Phnom_Penh"));
System.out.println("Now " + now);
System.out.println("In 3.5 months " + now.plusNanos(Math.round(3.5 * oneMonthInNanos)));
System.out.println("In 4.5 months " + now.plusNanos(Math.round(4.5 * oneMonthInNanos)));
System.out.println("In 12 months " + now.plusNanos(Math.round(12.0 * oneMonthInNanos)));
我刚才运行代码时的输出是:
Now 2018-11-06T22:31:36.460573+07:00[Asia/Phnom_Penh] In 3.5 months 2019-02-21T11:13:27.460573+07:00[Asia/Phnom_Penh] In 4.5 months 2019-03-23T21:42:33.460573+07:00[Asia/Phnom_Penh] In 12 months 2019-11-07T04:20:48.460573+07:00[Asia/Phnom_Penh]
正如评论中所说,对于月份的小数部分没有真正好的定义。当您比较第一个和最后一个日期时间时,您还会清楚地看到 12 个月加起来并不精确等于一年,尽管非常接近。请自行检查结果是否足以满足您的目的。
我正在使用java.time。我不知道 Joda-Time 中是否可以实现类似的功能。
关于java - 在java中将十进制月份添加到日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173616/