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);

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PHP优化01 PHP引擎优化 PHP引擎加速器的安装

    PHP优化01 PHP引擎优化 PHP引擎加速器的安装

  • 麻将公式一定要背下来「大全」

    麻将公式一定要背下来「大全」麻将计算公式:一、可胡牌情况1:N*(ABC)+M*(AAA)+AA,N+M<=4.2:7*AA(又叫七对)二、倍数计算:一倍:杂色平胡,即:N*(ABC)+M*(AAA)+AA,1<=N<=4两倍:1:一砍,即手上或旁边(AAAA)2:大对子,即:M*(AAA)+AA,1<=M<=43:海底捞,即桌上最后一张牌自摸四倍:1:清一色,即所有麻将花色一样2:金钩钓,即AA3:小七对,即7*(AA)4:杠上花,即开杠后自摸注:以上

  • 中国程序员第一人(目前世界第一首富是谁)

    过去的20年是程序员快意恩仇的江湖时代通过代码,实现梦想和财富有人痴迷于技术,做出一夜成名的产品有人将技术变现,创办企业成功上市这些早一代的程序员们创造的奇迹引发了一浪高…

  • 锂电池稳压3.3V芯片_电源芯片型号

    锂电池稳压3.3V芯片_电源芯片型号干电池升压3.3V的电源芯片PW5100适用于一节干电池升压到3.3V,两节干电池升压3.3V的升压电路,PW5100干电池升压IC。干电池1.5V和两节干电池3V升压到3.3V的测试数据输入电压输入电流输出电压输出电流0.9V输入测试0.907V0.21A3.26V50MA0.887V0.45A3.21V100MA0.857V0.83A3.12V150MA输入电压输入电流输出电压输出电流1V输入测试1V0.9…

  • Python怎么输入小数和整数_python输入非负整数

    Python怎么输入小数和整数_python输入非负整数python匹配整数或者小数(包括正数和负数)(简单易懂,代码可以直接运行)*这个实验算是五个正则表达式里面最难的的哪一个了,?是正则表达式里面贪婪与非贪婪的概念,有?则-?可有可无,刚好可以用于判断正数和负数,.在正则表达式里面表示的是任意字符(空格除外),因此如果要想表示小数点,需要加上以恶搞转义字符\,而区分整数和小数这两种情况,则需要加上一个|符号,表示前面的字符出现0次一次,+表示前面的字符出现1次以上#匹配整数或者小数num=’3333.3333’sss=re.search(r

  • IOS开发之AVAudioPlayer的基本使用

    IOS开发之AVAudioPlayer的基本使用

发表回复

您的电子邮箱地址不会被公开。

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