java 两个日期的天数_计算Java 8中两个日期之间的天数
我知道有很多关于如何获得的问题,但我想要和使用新的Java 8 Date api的例子。 我也知道JodaTime库,但我想要一种没有外部库的工作方式。
功能需要抱怨这些限制:
防止日期保存时间错误
输入是两个Date的对象(没有时间,我知道localdatetime,但我需要处理日期实例)
比如这样的东西?
@MadProgrammer不是真的 - 持续时间不是最合适的...
@assylias嗯,这比OP的好
@assylias然后是什么?
@MadProgrammer DAYS.between(localDate1, localDate2)。
如果您想要逻辑日历日,请使用java.time.temporal.ChronoUnit中的DAYS.between()方法:
LocalDate dateBefore;
LocalDate dateAfter;
long daysBetween = DAYS.between(dateBefore, dateAfter);
如果你想要文字24小时日(持续时间),你可以使用Duration类代替:
LocalDate today = LocalDate.now()
LocalDate yesterday = today.minusDays(1);
// Duration oneDay = Duration.between(today, yesterday); // throws an exception
Duration.between(today.atStartOfDay(), yesterday.atStartOfDay()).toDays() // another option
有关更多信息,请参阅此文档(以及其他文档:Oracle的Java 8)。
抛出异常,因为Duration.between方法需要能够支持SECONDS单元的临时对象。相反,尝试Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()。
-1持续时间不适合这样做。
而不是today.atTime(0, 0),你可以做today.atStartOfDay()。
@assylias为什么不呢?
@REACHUS也许-1有点苛刻,因为你提出的代码有效,但持续时间是为了衡量"基于时间的时间量"。有一种内置方法可以测量不需要从日期转换为日期时间的天数。
根据VGR的评论,您可以使用以下内容:
ChronoUnit.DAYS.between(firstDate, secondDate)
您可以使用until():
LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
LocalDate christmas = LocalDate.of(2014, Month.DECEMBER, 25);
System.out.println("Until christmas:" + independenceDay.until(christmas));
System.out.println("Until christmas (with crono):" + independenceDay.until(christmas, ChronoUnit.DAYS));
我正在寻找第二个System.out.println语句。谢谢!
我刚刚遇到的第一个版本until的问题是它返回一个Period对象。这将在两个日期之间返回多年/月/天,而不是实际天数。并且期间的getDays()仅返回日期部分(不考虑年数或月数),而不是总天数。第二个版本完全符合要求,可以在两个日期之间获得若干天。
对此有完整的替代方案吗?因为它需要Android SDk 26及以上版本
您可以使用java.time.temporal.ChronoUnit中的DAYS.between
例如
import java.time.temporal.ChronoUnit;
public long getDaysCountBetweenDates(LocalDate dateBefore, LocalDate dateAfter) {
return DAYS.between(dateBefore, dateAfter);
}
If starDate and endDate are instance of java.util.Date, besides to
@mohamed answer
Integer noOfDays = ChronoUnit.DAYS.between(startDate.toInstant(), endDate.toInstant());
但ChronoUnit.DAYS计算完成24小时的天数。
每个人都说使用ChronoUnit.DAYS.between,但只是委托给你自己称之为另一种方法。所以你也可以做firstDate.until(secondDate, ChronoUnit.DAYS)。
两者的文档实际上都提到了这两种方法,并说使用哪一种更具可读性。
FWIW ......我不确定为什么两者都存在。是否有时候一个更可读,另一个是另一个?当/为什么?
在枚举java.time.temporal.ChronoUnit中使用DAYS。以下是示例代码:
输出:
*开始日期:2015-03-01和结束日期之间的天数:2016-03-03是==> 368。
**开始日期:2016-03-03和结束日期之间的天数:2015-03-01是==> -368 *
package com.bitiknow.date;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
/**
*
* @author pradeep
*
*/
public class LocalDateTimeTry {
public static void main(String[] args) {
// Date in String format.
String dateString ="2015-03-01";
// Converting date to Java8 Local date
LocalDate startDate = LocalDate.parse(dateString);
LocalDate endtDate = LocalDate.now();
// Range = End date - Start date
Long range = ChronoUnit.DAYS.between(startDate, endtDate);
System.out.println("Number of days between the start date :" + dateString +" and end date :" + endtDate
+" is ==>" + range);
range = ChronoUnit.DAYS.between(endtDate, startDate);
System.out.println("Number of days between the start date :" + endtDate +" and end date :" + dateString
+" is ==>" + range);
}
}
干得好:
public class DemoDate {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("Current date:" + today);
//add 1 month to the current date
LocalDate date2 = today.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month:" + date2);
// Put latest date 1st and old date 2nd in 'between' method to get -ve date difference
long daysNegative = ChronoUnit.DAYS.between(date2, today);
System.out.println("Days :"+daysNegative);
// Put old date 1st and new date 2nd in 'between' method to get +ve date difference
long datePositive = ChronoUnit.DAYS.between(today, date2);
System.out.println("Days :"+datePositive);
}
}
获取当天圣诞节前的天数,试试这个
System.out.println(ChronoUnit.DAYS.between(LocalDate.now(),LocalDate.of(Year.now().getValue(), Month.DECEMBER, 25)));
如果目标只是为了获得天数的差异,并且由于上述答案提到了委托方法,我想指出一次也可以简单地使用 -
public long daysInBetween(java.time.LocalDate startDate, java.time.LocalDate endDate) {
// Check for null values here
return endDate.toEpochDay() - startDate.toEpochDay();
}
在陷阱中使用'Period.between(date1,date2).getDays()'而没有意识到你松散了差异的月份和年份。
get days between two dates date is instance of java.util.Date
public static long daysBetweenTwoDates(Date dateFrom, Date dateTo) {
return DAYS.between(Instant.ofEpochMilli(dateFrom.getTime()), Instant.ofEpochMilli(dateTo.getTime()));
}
我知道这个问题适用于Java 8,但使用Java 9可以使用:
public static List getDatesBetween(LocalDate startDate, LocalDate endDate) {
return startDate.datesUntil(endDate)
.collect(Collectors.toList());
}
java 两个日期的天数_计算Java 8中两个日期之间的天数相关推荐
- wps表格日期计算天数_如何计算Google表格中两个日期之间的天数
wps表格日期计算天数 If you want to count the number of days between two dates, you can use the DAYS, DATEDIF ...
- mysql 指定日期条件求和_如何在mysql中按每个日期对字段进行求和-问答-阿里云开发者社区-阿里云...
我正在尝试根据案件的日期查询QUERY总计字段罚款,何时但不成功,有解决方案吗? 我的桌子 NIP NAMA TANGGAL JENIS_KEHADIRAN DENDA 10016 Novi Iraw ...
- R语言epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、标准化系数、每当剔除某一条目后系数的变化、设置reverse参数不对任何数据对象进行反序
R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化
- R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、使用alpha函数和基于业务筛选的数据列的列表计算Cronbach‘s α
R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.使用alpha函数和基于业务筛选的数据列的列表计算Cronbach's α 目录
- R语言epiDisplay包alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、标准化系数、每剔除某一条目后系数的变化、var.labels.trunc参数指定字符串长度
R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化系数.每当剔除某一条目后系数的变化.使用var.l ...
- R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、、每剔除某一条目后系数的变化、alphaBest函数获取最高alpha值对应的项目集
R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化系数.每当剔除某一条目后系数的变化.使用alpha ...
- java日期相差周_利用Java中Calendar计算两个日期之间的天数和周数
前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每 ...
- java两个字符串 相隔天数_关于Java: Joda-Time时间中两个日期之间的天数
我如何找到两个joda time DateTime实例之间的天数差异?如果开始时间是星期一,结束时间是星期二,那么不管开始和结束日期的小时/分钟/秒是多少,返回值都应该是1. 如果从晚上开始到早上结束 ...
- java 时间间隔 工作日_计算Java中两个日期之间的工作日数
5行代码无循环的解决方案 定义之间的天数的方式与ChronoUnit.DAYS.between(start, end)表示4星期一至星期五之间存在天数的方式相同.由于我们只对工作日感兴趣,因此我们必须 ...
最新文章
- ICDM 2019最佳论文:从图片、文本到网络结构数据翻译,一种新型的多属性图翻译模型
- ABAP知识:LIKE LINE OF 和LIKE TABLE OF
- java swing 传值_java swing 窗体之间怎么传值?
- mysql 8添加账号赋予权限
- linux网络编程之SCTP套接字常用接口
- 理解云原生--开发模型、架构原则、主要技术
- 内核网络设备的注册与初始化
- 分析单点登录(流程图与数据安全)
- [转载]在iTOP-4412开发板上调试helloworld应用
- win10键盘失灵一键修复方法
- C# 获取打印机状态
- 微信测试公众号推送信息给女朋友(node版本)
- 【重温C/C++】explicit+||template||virtual虚函数||重载和重写
- mysql url查找_Superl-url:一款开源、强大的关键词URL采集工具
- 电影院同场不同价 你愿意为“黄金座位”买单吗
- uniapp--动态背景特效1
- 签名设计一笔教写过程
- YOLOv5 安全帽识别:如何使用 YOLOv5 进行实时安全帽检测
- 总结近年来我国主、被动遥感卫星发射的情况
- 我的2021年度书单(主要教你面试怎么装B)