Java计算时间差、日期差

这篇具有很好参考价值的文章主要介绍了Java计算时间差、日期差。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在java中,计算时间差或日期差有多种方法,以下提供五种示例:


目录

一、使用 Instant 和 Duration 类计算时间差

二、使用 LocalDate 和 ChronoUnit 类计算日期差

三、使用 Joda-Time 库计算时间差和日期差

四、使用 Instant 和 Period 类计算日期差

五、使用 Java 8 的 java.time.temporal.ChronoUnit 类计算时间或日期差

Joda-Time


一、使用 Instant 和 Duration 类计算时间差

Instant start = Instant.now();
Thread.sleep(1000);   // 让程序睡眠 1 秒钟,模拟耗时操作
Instant end = Instant.now();

Duration duration = Duration.between(start, end);
System.out.println("Time elapsed: " + duration.toMillis() + " milliseconds");

这个示例使用 Instant 类获取开始时间和结束时间,然后使用 Duration 类计算时间差。Duration 类提供了一些方便的方法,如 toMillis() 和 toSeconds() 方法,可以将时间差转换为毫秒或秒数。

二、使用 LocalDate 和 ChronoUnit 类计算日期差

LocalDate start = LocalDate.of(2021, Month.JANUARY, 1);
LocalDate end = LocalDate.of(2021, Month.DECEMBER, 31);

long days = ChronoUnit.DAYS.between(start, end);
System.out.println("Days elapsed: " + days);

这个示例使用 LocalDate 类获取开始日期和结束日期,在使用 ChronoUnit 类计算日期差时,使用 DAYS 枚举表示计算出的日期差的时间单位为天数。需要注意的是,ChronoUnit 类提供了多个时间单位,可以根据具体需求选择适当的时间单位。

三、使用 Joda-Time 库计算时间差和日期差

DateTime start = new DateTime(2022, 1, 1, 0, 0, 0, 0);
DateTime end = new DateTime(2022, 12, 31, 23, 59, 59, 999);

Duration duration = new Duration(start, end);
System.out.println("Time elapsed: " + duration.getMillis() + " milliseconds");

Days days = Days.daysBetween(start.toLocalDate(), end.toLocalDate());
System.out.println("Days elapsed: " + days.getDays());

这个示例使用 Joda-Time 库获取开始时间和结束时间。在计算时间差时,使用 Duration 类计算时间差,并使用 getMillis() 方法获取时间差的毫秒数;在计算日期差时,使用 Days 类计算日期差,并使用 getDays() 方法获取天数。需要注意的是,该库已在 Java 8 中得到了标准化,因此,现在的 Java 版本已经可以通过使用 java.time 包来代替 Joda-Time 库。Joda-Time库的使用在文章末尾!

四、使用 Instant 和 Period 类计算日期差

Instant start = Instant.now();
Thread.sleep(1000);   // 让程序睡眠 1 秒钟,模拟耗时操作
Instant end = Instant.now();

Period period = Period.between(start.atZone(ZoneId.systemDefault()).toLocalDate(),
                               end.atZone(ZoneId.systemDefault()).toLocalDate());
System.out.println("Days elapsed: " + period.getDays());

这个示例使用 Instant 类获取开始时间和结束时间,并使用 Period 类计算日期差。Period 类用于以年、月和日为单位表示时间段。需要注意的是,由于 Instant 类表示一个瞬间,不包含时区和日期信息,因此,需要使用 atZone() 方法将其转换为带时区的 ZonedDateTime 类。如果程序运行在不同的时区中,需注意时区的差异对最终计算结果的影响。

五、使用 Java 8 的 java.time.temporal.ChronoUnit 类计算时间或日期差

LocalDateTime start = LocalDateTime.of(2021, Month.JANUARY, 1, 0, 0, 0);
LocalDateTime end = LocalDateTime.of(2021, Month.DECEMBER, 31, 23, 59, 59);

long days = ChronoUnit.DAYS.between(start, end);
long hours = ChronoUnit.HOURS.between(start, end);
long minutes = ChronoUnit.MINUTES.between(start, end);
long seconds = ChronoUnit.SECONDS.between(start, end);

System.out.println("Days elapsed: " + days);
System.out.println("Hours elapsed: " + hours);
System.out.println("Minutes elapsed: " + minutes);
System.out.println("Seconds elapsed: " + seconds);

这个示例使用 Java 8 的 java.time.temporal.ChronoUnit 类获取开始时间和结束时间,然后计算时间或日期差。ChronoUnit 类提供了多个方法,可用于计算不同时间段的差。在使用此方法时,需要注意开始时间和结束时间必须是同一时间段的。

Joda-Time

maven

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.10</version>
</dependency>

 Joda-Time 库的通用工具类,主要包括日期、时间、时间间隔等功能

import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class JodaTimeUtils {

    // 获取当前日期
    public static LocalDate getCurrentDate() {
        return new LocalDate();
    }

    // 获取当前时间
    public static LocalTime getCurrentTime() {
        return new LocalTime();
    }

    // 获取当前日期和时间
    public static LocalDateTime getCurrentDateTime() {
        return new LocalDateTime();
    }

    // 获取指定日期的开始时间
    public static LocalDateTime getStartOfDay(LocalDate date) {
        return date.toLocalDateTime(LocalTime.MIN);
    }

    // 获取指定日期的结束时间
    public static LocalDateTime getEndOfDay(LocalDate date) {
        return date.toLocalDateTime(LocalTime.MAX);
    }

    // 获取指定日期时间的格式化字符串
    public static String formatDateTime(LocalDateTime dateTime, String pattern) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
        return dateTime.toString(formatter);
    }

    // 将格式化字符串转换成日期时间
    public static LocalDateTime parseDateTime(String dateTimeString, String pattern) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
        return formatter.parseLocalDateTime(dateTimeString);
    }

    // 计算两个日期之间的天数
    public static int getDaysBetween(LocalDate startDate, LocalDate endDate) {
        Days days = Days.daysBetween(startDate, endDate);
        return days.getDays();
    }

    // 计算两个日期时间之间的秒数
    public static int getSecondsBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Seconds seconds = Seconds.secondsBetween(startDateTime, endDateTime);
        return seconds.getSeconds();
    }

    // 计算两个日期时间之间的分钟数
    public static int getMinutesBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Minutes minutes = Minutes.minutesBetween(startDateTime, endDateTime);
        return minutes.getMinutes();
    }

    // 计算两个日期时间之间的小时数
    public static int getHoursBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Hours hours = Hours.hoursBetween(startDateTime, endDateTime);
        return hours.getHours();
    }

    // 计算两个日期时间之间的毫秒数
    public static long getMillisBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        return new Duration(startDateTime.toDateTime(), endDateTime.toDateTime()).getMillis();
    }

    // 判断两个日期是否相等
    public static boolean isEqual(LocalDate date1, LocalDate date2) {
        return date1.equals(date2);
    }

    // 判断两个日期时间是否相等
    public static boolean isEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.equals(dateTime2);
    }

    // 判断一个日期是否在另一个日期之前
    public static boolean isBefore(LocalDate date1, LocalDate date2) {
        return date1.isBefore(date2);
    }

    // 判断一个日期时间是否在另一个日期时间之前
    public static boolean isBefore(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isBefore(dateTime2);
    }

    // 判断一个日期是否在另一个日期之后
    public static boolean isAfter(LocalDate date1, LocalDate date2) {
        return date1.isAfter(date2);
    }

    // 判断一个日期时间是否在另一个日期时间之后
    public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isAfter(dateTime2);
    }

    // 判断一个日期是否在另一时间间隔内
    public static boolean isInInterval(LocalDate date, Interval interval) {
        return interval.contains(date.toDateTimeAtStartOfDay());
    }

    // 判断一个日期时间是否在另一时间间隔内
    public static boolean isInInterval(LocalDateTime dateTime, Interval interval) {
        return interval.contains(dateTime.toDateTime());
    }
}

使用示例:文章来源地址https://www.toymoban.com/news/detail-627579.html

LocalDate date1 = new LocalDate(2020, 1, 1);
LocalDate date2 = new LocalDate(2022, 1, 1);
System.out.println(JodaTimeUtils.getDaysBetween(date1, date2)); // 输出 731

LocalDateTime dateTime1 = new LocalDateTime(2020, 1, 1, 12, 0, 0);
LocalDateTime dateTime2 = new LocalDateTime(2022, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.getHoursBetween(dateTime1, dateTime2)); // 输出 17520

String dateTimeString = "2020-01-01 12:00:00";
LocalDateTime dateTime = JodaTimeUtils.parseDateTime(dateTimeString, "yyyy-MM-dd HH:mm:ss");
System.out.println(JodaTimeUtils.formatDateTime(dateTime, "yyyy年MM月dd日 HH:mm:ss")); // 输出 2020年01月01日 12:00:00

LocalDateTime startDateTime = new LocalDateTime(2020, 1, 1, 12, 0, 0);
LocalDateTime endDateTime = new LocalDateTime(2022, 1, 1, 12, 0, 0);
Interval interval = new Interval(startDateTime.toDateTime(), endDateTime.toDateTime());

LocalDateTime dateTimeBefore = new LocalDateTime(2019, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeBefore, interval)); // 输出 false

LocalDateTime dateTimeAfter = new LocalDateTime(2023, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeAfter, interval)); // 输出 false

LocalDateTime dateTimeWithin = new LocalDateTime(2021, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeWithin, interval)); // 输出 true

到了这里,关于Java计算时间差、日期差的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C#)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年02月09日
    浏览(57)
  • 飞书-多维文档-计算时间差

    如图所示,字段类型选择 公式 单击 公式编辑器 在弹出的公式编辑框中输入公式 TEXT([终结时间]-[开始时间],\\\"HH:MM\\\") [终结时间] 和 [开始时间] 请替换成你的表格中对应的字段名称 HH:MM 表示输出的时间格式为 时:分 其中 “YYY/MM/DD HH:MM” 表示 年月日时分,可以自行选取合适的值

    2024年02月07日
    浏览(67)
  • LocalDate、LocalDateTime计算时间差

    LocalDateTime计算天数和时间差 以下是Jdk1.7存在的问题以及Jdk1.8新特性 Jdk1.7的问题   在Jdk1.8版本发布了新的Date-Time API来加强对时间、日期的处理。这是因为在Jdk1.7中时间、日期的处理上存在如下的一些问题。 非线程安全。Date类是非线程安全的,这是Java时间日期类中最大的

    2023年04月15日
    浏览(36)
  • python获取当前时间(年-月-日 时:分:秒:毫秒),提取当前日期/时间数字,获取程序运行的时间差(时:分:秒),让程序停止xx秒【两种方法,第二种方法精度较高】

    目录 》》》第一种方法,代码如下:(获取当前时间,提取当前日期/时间数字) 》》》第二种方法,代码如下:(获取当前时间,提取日期/时间数字,获取时间差【时:分:秒】) 》》》第一种方法,代码如下:(获取当前时间,提取当前日期/时间数字) 第一种方法的运行

    2024年02月16日
    浏览(58)
  • C语言: 两段时间求出时间差

      运行结果:

    2024年02月06日
    浏览(42)
  • mysql怎么求时间差

    1、使用TIMEDIFF()函数 TIMEDIFF(dt1, dt2):计算两个TIME或DATETIME值之间的差值,两个必须为相同类型的参数,即TIME或DATETIME。 TIMEDIFF函数返回表示为时间值的dt1 - dt2的结果,如果任一参数为NULL,TIMEDIFF函数将返回NULL 2、使用IMESTAMPDIFF()函数 TIMESTAMPDIFF(unit,begin,end):计算两个DATE或DAT

    2024年02月13日
    浏览(41)
  • 面试算法35:最小时间差

    给定一组范围在00:00至23:59的时间,求任意两个时间之间的最小时间差。例如,输入时间数组[“23:50”,“23:59”,“00:00”],\\\"23:59\\\"和\\\"00:00\\\"之间只有1分钟的间隔,是最小的时间差。 这个题目最直观的解法是求出任意两个时间的间隔,然后比较得出最小的时间差。如

    2024年02月06日
    浏览(41)
  • php怎么实现时间差

    php实现时间差的方法:1、通过strtotime函数将两个日期转换为时间戳;2、通过“$enddate-$startdate”公式将两个时间戳相减;3、将时间差“$diff_seconds”除以86400,并使用“floor()”函数向下舍入为最接近的整数即可获得相差天数。 php怎么实现时间差? php求两个给定日期的时间差:

    2024年02月08日
    浏览(87)
  • 解决时间差太大导致Windows无法同步时间

    按微软文档进入注册表修改: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig MaxPosPhaseCorrection和MaxNegPhaseCorrection为:0xffffffff (8个F) 但是发现W32TimeConfig里面是空的,而且无法创建 查看config目录权限,发现权限丢失,重新继承权限后修改成功。 另外设置同步时间间隔

    2024年02月16日
    浏览(63)
  • 【hive 】时间差(天、小时、分、秒)和常用时间格式转

    unix_timestamp()是hive系统时间,格式是timestamp,精确到秒。 unix_timestamp(ymdhms)是把时间转换成timestamp格式,是2018-05-23 07:15:50格式。 unix_timestamp() - unix_timestamp(ymdhms)是两个时间转换为timestamp之后相减,timestamp单位是秒,相减之后是两个时间之间相差的秒数。 CAST((unix_timestamp() - un

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包