java - 在java中将十进制月份添加到日期

标签 java date

我需要向 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/

相关文章:

Java 泛型、类型推断、继承?

java - 从 C++ 调用 Java

java - 按日期排序表条目

r - 在2个日期之间对数据框进行分组

macos - 如何在 OS X 上使用 date 命令回显任何时区自午夜以来的分钟数?

date - 如何在Hive中将ISO日期转换为UTC日期

java - Android ProgressDialog颜色随机反转

java - 使用NamedParameterJdbcTemplate更新数组字段

date - 如何将这些字符字段转换为 hive 中的时间戳

java - 手动设置日期和时间 - java