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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 交叉熵损失函数和对数损失函数_多分类交叉熵损失函数公式

    交叉熵损失函数和对数损失函数_多分类交叉熵损失函数公式如果使用均方差作为损失函数所以,如果当前模型的输出接近0或者1时,σ′(z)就会非常小,接近0,使得求得的梯度很小,损失函数收敛的很慢。如果使用交叉熵作为损失函数原文链接:为什么LR模型损失函数使用交叉熵不用均方差?…

    2022年10月9日
  • 什么是python标识符?_python语言正确的标识符

    什么是python标识符?_python语言正确的标识符简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。标识符不能和Python中的保留字相同。有关保留字,后续章节会详细介绍。Python中的标识符中,不能包含空格、@、%以及$等特殊字符。例如,下面所列举的标识符是合法的:UserIDnamemode12

    2022年9月8日
  • oracle常用操作_oracle日志文件在哪里

    oracle常用操作_oracle日志文件在哪里如果某个oracle账户经常被锁定,说明有应用程序或有人远程连接数据库多次失败后导致账户被锁定,oracle默认是有次数限制的,可以通过以下方式解决问题:1、用管理员账户登录:connsys/sysassysdba;2、解锁账户:alteruserscottaccountunlock;3、重置账户密码:alteruserscottidentifiedbytiger;4、授权:grantresource,connecttoscott;5、修改oracle默认配置:al

    2022年10月28日
  • java对象转json字符串方法_java json字符串转对象

    java对象转json字符串方法_java json字符串转对象当学习如何编写基于Java的软件时,开发人员遇到的第一个障碍就是如何将其代码与其他软件连接。这通常是JSON的来源。尽管您可能是Java向导,但JSON是另一种动物。无论如何,这篇博客文章解释了完成工作所需的一切。Java对象是数据和处理可用数据的过程的组合。对象既有状态又有行为。在Java中,使用关键字“new”创建对象。对象是从称为类的模板创建的。…

    2022年9月21日
  • linux 解压分卷rar[通俗易懂]

    linux 解压分卷rar[通俗易懂]linux解压分卷rar其实很简单rarxxx.part001.rar执行解压之后系统会自动解压所有的part如果说解压过程当中解压有以存在文件的情况下选择never这样会省不少时间特别是接他大量文件的时候…

    2022年5月23日
  • Myeclipse7.5 下载 安装 注冊 注冊码 100%成功

    Myeclipse7.5 下载 安装 注冊 注冊码 100%成功

    2021年12月1日

发表回复

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

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