栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8中常见的日期处理方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8中常见的日期处理方法

18个Java8日期处理
    • 1. 获取当前的日期(LocalDate .now()方法)
    • 2. 获取年、月、日信息(getYear()、getMonthValue()、getDayOfMonth()方法)
    • 3.获取特定日期(LocalDate.of()方法)
    • 4.判断两个日期是否相等(equal方法)
    • 5.检查像生日这种周期性事件(MonthDay类、YearMonth类)
    • 6.获取当前时间(LocalTime.now())
    • 7.在已有的时间上加多少小时(.plusHours()方法)
    • 8.增加1个月、1年、1小时、1分钟甚至一个世纪(.plus()方法)
    • 9.减少一年(minus()方法)
    • 10.Clock时钟类
    • 11.判断日期是早于还是晚于另一个日期(isBefore() 和 isAfter()方法)
    • 12.处理时区
    • 13.YearMonth类应用
    • 14.检查闰年(isLeapYear()方法)
    • 15.计算两个日期之间的天数、周数或月数(Period类)
    • 16.包含时差信息的日期和时间
    • 17.获取当前的时间戳(Instant 类)
    • 18.格式化日期(DateTimeFormatter类)

Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。

1. 获取当前的日期(LocalDate .now()方法)
//获取今天的日期
    public static void main(String[] args) {
        LocalDate today1 = LocalDate.now();
        Date today2 = new Date();
        System.out.println("今天是:"+today1);//打印出的日期格式非常友好
        System.out.println("今天是:"+today2);
    }

输出是:

今天是:2021-10-25
今天是:Mon Oct 25 15:27:48 CST 2021
2. 获取年、月、日信息(getYear()、getMonthValue()、getDayOfMonth()方法)
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        int year = today.getYear();
        int month = today.getMonthValue();
        int day = today.getDayOfMonth();
        System.out.println("年:"+year);
        System.out.println("月:"+month);
        System.out.println("日:"+day);
    }

输出

年:2021
月:10
日:25
3.获取特定日期(LocalDate.of()方法)

LocalDate.of() 创建任意日期

    public static void main(String[] args) {
        LocalDate anyDay = LocalDate.of(1949,10,1);
        System.out.println(anyDay);
    }

输出为:

1949-10-01
4.判断两个日期是否相等(equal方法)

LocalDate 重载了equal方法。注意,如果比较的日期是字符型的,需要先解析成日期对象再作判断。

    public static void main(String[] args) {
        LocalDate day01 = LocalDate.now();
        LocalDate day02 = LocalDate.of(1989, 7, 15);
        System.out.println(day01);
        System.out.println(day02);
        System.out.println(day01.equals(day02));
    }

输出为:

2021-10-25
1989-08-16
false
5.检查像生日这种周期性事件(MonthDay类、YearMonth类)

MonthDay类:这个类组合了月份和日,去掉了年,可以用它判断每年都会发生事件
应用场景:生日、纪念日、法定假日(国庆以及春节)、或者每个月固定时间发送邮件给客户, 这些周期性事件。
和这个类相似的还有一个YearMonth类

    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate jwsBirth = LocalDate.of(1989, 7, 15);
        MonthDay birthday = MonthDay.of(jwsBirth.getMonth(), jwsBirth.getDayOfMonth());
        MonthDay currentMonthDay = MonthDay.from(today);
        System.out.println("生日的--月-日"+birthday);
        System.out.println("当天的--月-日"+currentMonthDay);
        if(currentMonthDay.equals(birthday)){
            System.out.println("jws生日快乐!");
        }else{
            System.out.println("今天不是jws生日");
        }
    }

输出为:

生日的--月-日--07-15
当天的--月-日--10-25
今天不是jws生日
6.获取当前时间(LocalTime.now())

LocalTime 类默认的格式是hh:mm:ss:nnn。

    public static void main(String[] args) {
        LocalTime nowTime = LocalTime.now();
        System.out.println("现在时间:"+nowTime);
    }

输出为:

现在时间:16:11:12.011//hh:mm:ss:nnn
7.在已有的时间上加多少小时(.plusHours()方法)
    public static void main(String[] args) {
        LocalTime time01 = LocalTime.of(23,59);
        LocalTime time02 = time01.plusHours(1);
        System.out.println("原来时间"+time01);
        System.out.println("更新时间"+time02);
    }

输出为:

原来时间23:59
更新时间00:59
8.增加1个月、1年、1小时、1分钟甚至一个世纪(.plus()方法)
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        LocalDate twoDay = today.plus(2, ChronoUnit.DAYS);
        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("今天 : " + today);
        System.out.println("增加1周: " + nextWeek);
        System.out.println("增加2天: " + twoDay);
        System.out.println("增加1年: " + nextYear);
    }

输出为:

今天 : 2021-10-25
增加1周: 2021-11-01
增加2天: 2021-10-27
增加1年: 2022-10-25
9.减少一年(minus()方法)
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
        System.out.println("现在日期:"+today);
        System.out.println("减少一年:" + previousYear);
    }

输出为:

现在日期:2021-10-25
减少一年:2020-10-25
10.Clock时钟类
    public static void main(String[] args) {
        Clock clock = Clock.systemUTC();
        Clock defaultClock = Clock.systemDefaultZone();
        System.out.println("根据系统时间返回当前时间并设置为UTC : " + clock);
        System.out.println("根据系统时钟区域返回时间 : " + defaultClock);
    }

输出为:

根据系统时间返回当前时间并设置为UTC : SystemClock[Z]
根据系统时钟区域返回时间 : SystemClock[Asia/Shanghai]
11.判断日期是早于还是晚于另一个日期(isBefore() 和 isAfter()方法)
    public static void main(String[] args) {
        LocalDate day01 = LocalDate.now();
        LocalDate day02 = LocalDate.of(1989, 7, 15);
        System.out.println("day01: " + day01);
        System.out.println("day02: " + day02);
        System.out.println("day01早于day02: " + day01.isBefore(day02));
        System.out.println("day01晚于day02: " + day01.isAfter(day02));
    }

输出为:

day01: 2021-10-25
day02: 1989-07-15
day01早于day02: false
day01晚于day02: true
12.处理时区

ZoneId 设置时区
ZoneDateTime 类来表示某时区下的时间

    public static void main(String[] args) {
        //设置中国时区
        ZoneId zone = ZoneId.of("Asia/Shanghai");
        LocalDateTime time = LocalDateTime.now();
        ZonedDateTime timeAndZone  = ZonedDateTime.of(time, zone);
        System.out.println("设置时区: "+zone);
        System.out.println("当前时间: "+time);
        System.out.println("现在的日期和时间在特定的时区: " + timeAndZone);
    }

输出为:

设置时区: Asia/Shanghai
当前时间: 2021-10-25T17:03:22.068
现在的日期和时间在特定的时区: 2021-10-25T17:03:22.068+08:00[Asia/Shanghai]
13.YearMonth类应用

lengthOfMonth() 方法返回当月的天数
场景:表示信用卡到期这类固定日期。还可以用这个类得到当月共有多少天,在判断2月有28天还是29天时非常有用。

    public static void main(String[] args) {
        YearMonth month = YearMonth.now();
        YearMonth days = YearMonth.of(1989, 2);
        System.out.println("当前年月: "+ month);
        System.out.println("当月有多少天: "+ month.lengthOfMonth());
        System.out.println("当年有多少天: "+ month.lengthOfYear());
        System.out.println("1989年2月有多少天: "+days.lengthOfMonth());
    }

输出为:

当前年月: 2021-10
当月有多少天: 31
当年有多少天: 365
1989年2月有多少天: 28
14.检查闰年(isLeapYear()方法)
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("现在是否是闰年: "+date.isLeapYear());
    }

输出为:

现在是否是闰年: false
15.计算两个日期之间的天数、周数或月数(Period类)
    public static void main(String[] args) {
        LocalDate day01 = LocalDate.now();
        LocalDate day02 = LocalDate.of(1989, 7, 15);
        Period differDays = Period.between(day01, day02);
        System.out.println("相差多少天: "+differDays.getDays());
        System.out.println("相差多少月: "+differDays.getMonths());
        System.out.println("相差多少年: "+differDays.getYears());
    }

输出为:

相差多少天: -10
相差多少月: -3
相差多少年: -32
16.包含时差信息的日期和时间

ZoneOffset类用来表示时区,举例来说印度与GMT或UTC标准时区相差+05:30,可以通过ZoneOffset.of()静态方法来 获取对应的时区。一旦得到了时差就可以通过传入LocalDateTime和ZoneOffset来创建一个OffSetDateTime对象。

    public static void main(String[] args) {
        LocalDateTime datetime = LocalDateTime.now();
        ZoneOffset offset = ZoneOffset.of("+05:30");
        OffsetDateTime date = OffsetDateTime.of(datetime, offset);
        System.out.println("这个时区时间"+date);
    }

输出为:

这个时区时间 :2021-10-25T17:29:49.567+05:30
17.获取当前的时间戳(Instant 类)
    public static void main(String[] args) {
        Instant timestamp = Instant.now();
        System.out.println("获取当前时间戳: "+timestamp);
    }

输出为:

获取当前时间戳: 2021-10-25T09:31:25.428Z
18.格式化日期(DateTimeFormatter类)

Java 8引入了全新的日期时间格式工具,线程安全而且使用方便。它自带了一些常用的内置格式化工具。下面这个例子使用了BASIC_ISO_DATE格式化工具将19890715格式化成19890715

    public static void main(String[] args) {
        String dayStr = "19890715";
        LocalDate dayFormat = LocalDate.parse(dayStr, DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println("day字符串: "+dayStr);
        System.out.println("day时间格式: "+dayFormat);
    }

输出为:

day字符串: 19890715
day时间格式: 1989-07-15
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349030.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号