java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
Tapas Bose代码和Thomas代码存在一些问题。 如果时间差异为负,则数组获得负值。 例如,如果
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 10, 6, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(2014, 9, 9, 7, 46, 45);
它返回0年0个月1天-1小时0分0秒。
我认为正确的输出是:0年0个月0天23小时0分0秒。
我建议在LocalDate和LocalTime实例上分离LocalDateTime实例。 之后,我们可以获得Java 8 Period和Duration实例。 持续时间实例按天数和全天时间值(<24h)分开,随后校正周期值。 当第二个LocalTime值在firstLocalTime值之前时,有必要减少一天的时间。
这是我计算LocalDateTime差异的方法:
private void getChronoUnitForSecondAfterFirst(LocalDateTime firstLocalDateTime, LocalDateTime secondLocalDateTime, long[] chronoUnits) {
/*Separate LocaldateTime on LocalDate and LocalTime*/
LocalDate firstLocalDate = firstLocalDateTime.toLocalDate();
LocalTime firstLocalTime = firstLocalDateTime.toLocalTime();
LocalDate secondLocalDate = secondLocalDateTime.toLocalDate();
LocalTime secondLocalTime = secondLocalDateTime.toLocalTime();
/*Calculate the time difference*/
Duration duration = Duration.between(firstLocalDateTime, secondLocalDateTime);
long durationDays = duration.toDays();
Duration throughoutTheDayDuration = duration.minusDays(durationDays);
Logger.getLogger(PeriodDuration.class.getName()).log(Level.INFO,
"Duration is: " + duration + " this is " + durationDays
+ " days and " + throughoutTheDayDuration + " time.");
Period period = Period.between(firstLocalDate, secondLocalDate);
/*Correct the date difference*/
if (secondLocalTime.isBefore(firstLocalTime)) {
period = period.minusDays(1);
Logger.getLogger(PeriodDuration.class.getName()).log(Level.INFO,
"minus 1 day");
}
Logger.getLogger(PeriodDuration.class.getName()).log(Level.INFO,
"Period between " + firstLocalDateTime + " and "
+ secondLocalDateTime + " is: " + period + " and duration is: "
+ throughoutTheDayDuration
+ "\n-----------------------------------------------------------------");
/*Calculate chrono unit values and write it in array*/
chronoUnits[0] = period.getYears();
chronoUnits[1] = period.getMonths();
chronoUnits[2] = period.getDays();
chronoUnits[3] = throughoutTheDayDuration.toHours();
chronoUnits[4] = throughoutTheDayDuration.toMinutes() % 60;
chronoUnits[5] = throughoutTheDayDuration.getSeconds() % 60;
}
上述方法可用于计算任何本地日期和时间值的差异,例如:
public long[] getChronoUnits(String firstLocalDateTimeString, String secondLocalDateTimeString) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime firstLocalDateTime = LocalDateTime.parse(firstLocalDateTimeString, formatter);
LocalDateTime secondLocalDateTime = LocalDateTime.parse(secondLocalDateTimeString, formatter);
long[] chronoUnits = new long[6];
if (secondLocalDateTime.isAfter(firstLocalDateTime)) {
getChronoUnitForSecondAfterFirst(firstLocalDateTime, secondLocalDateTime, chronoUnits);
} else {
getChronoUnitForSecondAfterFirst(secondLocalDateTime, firstLocalDateTime, chronoUnits);
}
return chronoUnits;
}
为上述方法编写单元测试很方便(它们都是PeriodDuration类成员)。 这是代码:
@RunWith(Parameterized.class)
public class PeriodDurationTest {
private final String firstLocalDateTimeString;
private final String secondLocalDateTimeString;
private final long[] chronoUnits;
public PeriodDurationTest(String firstLocalDateTimeString, String secondLocalDateTimeString, long[] chronoUnits) {
this.firstLocalDateTimeString = firstLocalDateTimeString;
this.secondLocalDateTimeString = secondLocalDateTimeString;
this.chronoUnits = chronoUnits;
}
@Parameters
public static Collection periodValues() {
long[] chronoUnits0 = {0, 0, 0, 0, 0, 0};
long[] chronoUnits1 = {0, 0, 0, 1, 0, 0};
long[] chronoUnits2 = {0, 0, 0, 23, 0, 0};
long[] chronoUnits3 = {0, 0, 0, 1, 0, 0};
long[] chronoUnits4 = {0, 0, 0, 23, 0, 0};
long[] chronoUnits5 = {0, 0, 1, 23, 0, 0};
long[] chronoUnits6 = {29, 8, 24, 12, 0, 50};
long[] chronoUnits7 = {29, 8, 24, 12, 0, 50};
return Arrays.asList(new Object[][]{
{"2015-09-09 21:46:44", "2015-09-09 21:46:44", chronoUnits0},
{"2015-09-09 21:46:44", "2015-09-09 22:46:44", chronoUnits1},
{"2015-09-09 21:46:44", "2015-09-10 20:46:44", chronoUnits2},
{"2015-09-09 21:46:44", "2015-09-09 20:46:44", chronoUnits3},
{"2015-09-10 20:46:44", "2015-09-09 21:46:44", chronoUnits4},
{"2015-09-11 20:46:44", "2015-09-09 21:46:44", chronoUnits5},
{"1984-12-16 07:45:55", "2014-09-09 19:46:45", chronoUnits6},
{"2014-09-09 19:46:45", "1984-12-16 07:45:55", chronoUnits6}
});
}
@Test
public void testGetChronoUnits() {
PeriodDuration instance = new PeriodDuration();
long[] expResult = this.chronoUnits;
long[] result = instance.getChronoUnits(this.firstLocalDateTimeString, this.secondLocalDateTimeString);
assertArrayEquals(expResult, result);
}
}
无论第一个LocalDateTime的值是否在任何LocalTime值之前,所有测试都是成功的。
java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异相关推荐
- 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
知识点: 1.绝对值 Math.abs() 的运用 2.str1.splist() 字符串分割方法的运用 3.字符串强转整形Integer.parseInt()的运用 public class Stu ...
- Day640.Java 8的日期时间类问题 -Java业务开发常见错误
Java 8的日期时间类问题 Hi,阿昌来也! 今天记录分享的是Java 8的日期时间类问题 在 Java 8 之前,我们处理日期时间需求时,使用 Date.Calender 和 SimpleDate ...
- java中算两个时间内的秒数_java – Joda Time – 计算两个日期之间的秒数会引发异常....
我使用以下代码来计算两个日期之间的秒数差异: long secondsBetween = (Seconds.secondsBetween(new LocalDate("1901-01-01& ...
- java 月份间隔_java计算两个日期之间相隔的月份(向下取整)
最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...
- java 如何计算时间段_Java程序来计算两个时间段之间的时差
Java程序来计算两个时间段之间的时差 在此程序中,您将学习计算Java中两个时间段之间的时差. 示例:计算两个时间段之间的时差 public class Time { int seconds; in ...
- java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解
大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...
- java计算两个日期之间的天数(java计算两个日期之间的天数算法)
两个日期之间的天数要怎么计算? 两个日期之间的天数的计算=日期相减+1.比如:六月一号到六月三号,这之间是3天,分别是:一号.二号.三号,算式:3-1+1=3(天).同理,2001年到2002年是2年 ...
- Java 8计算两个日期之间的月份
开始日期:"2021-08-31" 结束日期:"2021-11-30" 在上述两个日期之间的91天持续时间,期望代码返回3个月的持续时间,但是以下方法仅返回2个 ...
- Java - 计算两个经纬度之间的直线距离
Java - 计算两个经纬度之间的直线距离 代码Github地址 https://github.com/FrankZuozuo/JavaSpecial 1.点接口 public interface P ...
最新文章
- 用友公司Java面试题(含答案)
- 聊聊高并发(三十六)Java内存模型那些事(四)理解Happens-before规则
- spring mvc绑定对象String转Date解决入参不能是Date的问题
- SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决
- 143_Power BIPower Pivot月度、季度、半年度、全年同维度展示
- 云安全仍然是程序开发者头痛的问题
- 使用拼凑URL的方法,实现DotNetNuke在新窗口中打开内容(三)
- devexpress 高分辨率显示问题_144Hz高刷+曲屏超2k 蚂蚁电竞显示器ANT271QC 小白到专业电竞跳板...
- word表头宽行重复
- x2检验(chi-square test)或称卡方检验
- STM32中使用MMA7660重力加速度传感器
- android 实现男女按钮选择
- 添加IIS FTP站点密码
- spring boot 整合 elasticsearch 创建索引库 映射
- outlook html 图片,Outlook邮件内容中的图片无法显示 图片
- 减轻压力保护脊椎,上学路上更轻松,Deuter多特护脊减负双肩背包体验
- Ubuntu 22.04下安装配置rime五笔输入法
- Spring MVC 详解
- Mac下cmake使用
- excel文件无法打印提示内存不足_Mac应用程序无法打开提示不明开发者或文件损坏的处理方法
热门文章
- 清华大学2017届本科毕业典礼演讲——做有思想的行者
- 运营商大数据有哪些好处
- 机器学习及算法-python
- HTTP协议的请求协议(个人笔记看不懂的地方可以和我交流)
- 一个人形图案程序c语言,如何用PPT绘制出人形图形
- winform前后端框架_ABP开发框架前后端开发系列(1)框架的总体介绍
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
- java的语法基础_JAVA语法基础1(入门手册)
- python语句命令的概念_Python学习笔记1-基础概念
- 因果推断与反事实预测——盒马KDD2021的一篇论文(二十三)