java months between,java 8-chronounit.months.between(fromdate,todate)不能按预期工作

java months between,java 8-chronounit.months.between(fromdate,todate)不能按预期工作就日历而言,您的问题是可以理解的:这两个比较代表一个完整的月。但是java.time.temporal.ChronoUnit.between不是以这种方式推理,而是以成套设备.根据它的javadoc,结果是预期的:计算返回一个整数,表示两个时间单位之间的完整单位.例如,中的金额从11:30到13:29的时间只有一个小时一分钟差两个小时。这个LocalDate.untiljavadoc,由Chro…

大家好,又见面了,我是你们的朋友全栈君。

就日历而言,您的问题是可以理解的:这两个比较代表一个完整的月。

但是

java.time.temporal.ChronoUnit.between

不是以这种方式推理,而是以

成套设备

.

根据它的javadoc,结果是预期的:

计算返回一个整数,表示

两个时间单位之间的完整单位

. 例如,中的金额

从11:30到13:29的时间只有一个小时

一分钟差两个小时。

这个

LocalDate.until

javadoc,由

ChronoUnit.between()

对您的案例来说更为明确,并给出了一个有趣的例子

between()

用于

MONTHS

作为

TemporalUnit

:

计算返回一个整数,表示

两个日期之间的完整单位。例如,中的金额

2012年6月15日至2012年8月14日之间的月份仅为一个月

比两个月少一天。

在您的工作示例中:

LocalDate startDate=LocalDate.of(2018,01,31);

LocalDate endDate=LocalDate.of(2018,7,31);

long noOfMonths = MONTHS.between(startDate,endDate);

你有

31 days of month / 31 days of month, on 6 months

= & gt;

6 months

.

在你失败的例子中:

LocalDate startDate=LocalDate.of(2018,01,31);

LocalDate endDate=LocalDate.of(2018,6,30);

long noOfMonths = MONTHS.between(startDate,endDate);

你有

30 days of month / 31 days of month, on 5 months

= & gt;

4 months + 1 month short of 1 day

& =;

4 months

(四舍五入)

如果你想写这样的东西:

LocalDate startDate=LocalDate.of(2018,01,30);

LocalDate endDate=LocalDate.of(2018,6,30);

long noOfMonths = MONTHS.between(startDate,endDate);

你会的

30 days of month / 30 days of month, on 5 months

= & gt;

5 months

.

关于你的问题:

有别的办法吗?

最简单的方法是:将“月日”设置为

1

或者两个日期中的同一个数字。

如果不适合您的要求,您可以检查这两个日期是否是当前月份的最后一天,在这种情况下,将其设置为相同的月份值。

你可以写一些像:

int lastMonthStart = startDate.getMonth()

.length(startDate.isLeapYear());

int lastMonthEnd = endDate.getMonth()

.length(endDate.isLeapYear());

if (startDate.getDayOfMonth() == lastMonthStart && endDate.getDayOfMonth() == lastMonthEnd) {

startDate = startDate.withDayOfMonth(1);

endDate = endDate.withDayOfMonth(1);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159762.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卷积神经网络CNN算法原理「建议收藏」

    卷积神经网络CNN算法原理「建议收藏」写在前面在上一篇【Deeplearning】卷积神经网络CNN结构中我们简单地介绍了CNN的结构。接下来我们看看这种结构的CNN模型是怎么运行的,包括CNN的前向传播和反向传播算法。1.CNN前向传播算法(1)输入层前向传播到卷积层输入层的前向传播是CNN前向传播算法的第一步。一般输入层对应的都是卷积层,因此我们标题是输入层前向传播到卷积层。我们这里还是以图像识别为例。先考虑…

    2022年9月3日
    3
  • pycharm的查找替换_pycharm调用其他py文件

    pycharm的查找替换_pycharm调用其他py文件1、打开要修改的文件2、ctrlr调出替换功能,如图所示:3、上面红框是需要更改的部分,下面红框是想要更改为部分,编辑后,点击“replaceall”即可示例原始页面ctrlr调出替换功能,如图所示在上一栏输入被替换字段,下一栏输入想换成的字段点击replaceall结果…

    2022年8月28日
    2
  • Python新手进阶教程之1、海龟作图——用Python绘图(1)「建议收藏」

    Python新手进阶教程之1、海龟作图——用Python绘图(1)「建议收藏」1.1海龟的作用使用海龟作图,我们不仅能够只用几行代码就创建出令人影响深刻的视觉效果,而且还可以跟海龟看看几行代买如何影响到它的移动。者能够帮助我们理解代码的逻辑。1.2第一个海龟程序让我们使用海龟作图来编写第一个程序。在一个新的IDLE窗口中输入如下的代码并将其保存为Square.py#Square.py-画一个正方形importturtlet=turtle.Pen()foriinrange(100):t.forward(x)t.left(90)

    2022年6月28日
    28
  • latex中求和符号正下方的符号怎么打_累加符号上下标的意义

    latex中求和符号正下方的符号怎么打_累加符号上下标的意义放在左上角的时候\sum^n:∑n\sum^n∑n放在正上方的时候\sum\limits^n:∑n\sum\limits^n∑n​放在右下角的时候\sum_{k=1}:∑k=1\sum_{k=1}∑k=1​放在正下方的时候\sum\limits_{k=1}:∑k=1\sum\limits_{k=1}k=1∑​

    2022年10月11日
    0
  • mybatis返回值_存储过程获取查询结果

    mybatis返回值_存储过程获取查询结果com.jerry.mapper.TestMapper.javapackagecom.jerry.mapper;importjava.util.List;importjava.util.Map;publicinterfaceTestMapper{ /** *查寻单个结果直接返回Map<String,Object> *@paramid *…………..

    2022年10月4日
    0
  • ElasticSearch数据库(ES数据库)简介

    ElasticSearch数据库(ES数据库)简介一elasticsearch简介**ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。**Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。1elasticSearch的使用场景1、为用户提供按关键字查询的全文搜索功能。2、实现…

    2022年4月28日
    81

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号