一文搞懂Java的时间与日期

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文是关于Java中日期和时间的处理,介绍了JDK8之前和之后的不同方法。在JDK8之前,使用`Date`、`SimpleDateFormat`和`Calendar`类,示例包括创建日期、格式化时间、解析字符串以及修改日期。JDK8引入了`LocalDate`、`LocalTime`、`LocalDateTime`、`ZoneId`、`ZonedDateTime`、`Instant`和`DateTimeFormatter`等新类,提供了更丰富的日期和时间操作,如获取时区时间、格式化与解析、计算日期间隔等。文章结尾鼓励读者点赞和支持。

@[toc]

日期与时间(Java)

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
在这里插入图片描述
💥个人主页code袁
💥 所属专栏Java

一、JDK8之前的

1.1 Date

Date 代表获取当前此时此刻的时间

1.构建日期对象

  Date date=new Date();
  System.out.println(date);

结果

Fri Mar 15 23:37:24 GMT+08:00 2024

2.获取毫秒值

  Date date=new Date();
   System.out.println(date.getTime());

结果

1710517044440

3.毫秒值转化为时间

   long time=date.getTime();
    Date d2=new Date(time);
    System.out.println(d2);

1.2 SimpleDateFormat

格式化、解析时间的
注意: 解析时间的格式必须与被解析时间的格式一模一样,否则报错!

1.日期的格式化

   Date date=new Date();
   SimpleDateFormat sf= new SimpleDateFormat("YYYY-MM-dd HH:mm:ss EEE a");
   System.out.println(sf.format(date));

结果

2024-03-15 23:37:24 星期五 下午

2.字符串时间解析成日期对象

  String start="2023年11月11日 0:0:0";
  SimpleDateFormat spf= new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  Date startDt= spf.parse(start);

结果

Sat Nov 11 00:00:00 GMT+08:00 2023

1.3 Calendar

代表日历,获取信息更丰富

1.日历对象

 Calendar now=Calendar.getInstance();
 System.out.println(now);

结果

ava.util.GregorianCalendar[time=1710517971008,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2024,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=75,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=52,SECOND=51,MILLISECOND=8,ZONE_OFFSET=28800000,DST_OFFSET=0]

2.获得日期

 Calendar now=Calendar.getInstance();
 System.out.println(now.getTime());

3.获得毫秒值

Calendar now=Calendar.getInstance();
 System.out.println(now.getTimeInMillis());

4.修改日期

Calendar now=Calendar.getInstance();
now.add(Calendar.DAY_OF_YEAR,100); 
System.out.println(now.get(Calendar.MONTH));

二、 JDK8之后的

2.1 LocalDate、LocalTime和LocalDateTime

LocalDate、LocalTime和LocalDateTime在语法上基本一致。
LocalDate获取年 月 日
LocalTime获取时 分 秒 纳秒
LocalDateTime获取年 月 日 时 分 秒 纳秒

1.获取本地日期对象

  LocalDate ld=LocalDate.now();

  System.out.println(ld);

2.获取具体的

        int year=ld.getYear();
        int month=ld.getMonthValue();
        int day=ld.getDayOfYear();
        //一年中第几天
        int dayOfYear=ld.getDayOfYear();
        //星期几
        int dayOfWeek=ld.getDayOfWeek().getValue();
        System.out.println(dayOfYear+"-----"+dayOfWeek);
2024-03-16
76-----6

3.基本操作

//修改 withYear withMonth,withDyofMonth
        LocalDate d2= ld.withYear(2028);  //修改的值在d2中
        System.out.println(d2.getYear());

        //加 plusYears plusMonth
        LocalDate d3=ld.plusYears(2);
        System.out.println(d3);

        //减 minusYears
        LocalDate d4=ld.minusYears(4);
        System.out.println(d4);

        //获取指定日期
        LocalDate d5=LocalDate.of(2035,05,12);
        System.out.println(d5);

        //判断日期对象
        System.out.println(d5.equals(d4));  //判断是否相等
        System.out.println(d5.isAfter(d4)); //判断是否在后
        System.out.println(d5.isBefore(d4)); //判断是否在前

2.2 ZoneId和ZonedDateTime

ZonedDateTime获取时区的时间
ZoneId 获取时区

 //zoneId 时区
        ZoneId zoneId= ZoneId.systemDefault();
        System.out.println(zoneId.getId());


        //带时区的时间
        ZonedDateTime now=ZonedDateTime.now();
        System.out.println(now);

        //获取标准时间
        ZonedDateTime now1=ZonedDateTime.now(Clock.systemUTC());
        System.out.println(now1);

        //系统默认时间
        ZonedDateTime now2=ZonedDateTime.now();
        System.out.println(now2);

        System.out.println(now2.getYear());

2.3 Instant

//创建Instant对象 不可变对象
        Instant It=Instant.now();
        System.out.println(It);

        //获取总秒数
        long second=It.getEpochSecond();
        System.out.println(second);

        //不够1秒的纳秒数
        int nano=It.getNano();
        System.out.println(nano);

2.4 DateTimeFormatter

对日期进行格式化

      //日期格式化
        DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy年mm月dd日 HH:mm:ss");

        LocalDateTime ldt5=LocalDateTime.now();

        System.out.println(dtf.format(ldt5));

        //解析时间
        String date ="2024年14月17日 00:14:17";
        LocalDateTime ldt6=LocalDateTime.parse(date,dtf);
        System.out.println(ldt6);

2.4 Period和 Duration

Period计算两个日期间隔的年数,月数,天数
Duration计算两个日期间隔的时,分,秒

  //日期间隔
        LocalDate start=LocalDate.of(2028,05,23);
        LocalDate end=LocalDate.of(2024,11,20);

       //创建period对象
        Period period=Period.between(end,start);


        System.out.println(period.getYears());
        System.out.println(period.getMonths());
        System.out.println(period.getDays());

        LocalDateTime t1=LocalDateTime.of(2028,05,23,11,11,11);
        LocalDateTime t2=LocalDateTime.of(2024,11,20,12,12,13);
        //获取间隔时 分 秒
        Duration duration=Duration.between(t2,t1);

        //间隔对象间隔信息
        System.out.println(duration.toDays());
        System.out.println(duration.toHours());
        System.out.println(duration.toMinutes());
        System.out.println(duration.toMillis());

🎉写在最后

🍻伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞👍或 Star ✨支持一下哦!手动码字,如有错误,欢迎在评论区指正💬~

你的支持就是我更新的最大动力💪~

目录
相关文章
|
4月前
|
Java
Java基础之日期和时间
Java基础之日期和时间
34 1
|
5月前
|
安全 Java 程序员
Java8实战-新的日期和时间API
Java8实战-新的日期和时间API
43 3
|
1月前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
34 14
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
49 3
|
2月前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
6月前
|
安全 Java Unix
Java语言中的日期与时间处理技术
Java语言中的日期与时间处理技术
101 0
|
3月前
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
21 2
【前端学java】java中的日期操作(13)
|
3月前
|
Java
比较两个日期是否相等Java
这篇文章提供了Java中比较两个日期是否相等的两种方法:使用`Calendar`类和`SimpleDateFormat`类来确定两个日期是否为同一天,并附有详细的代码示例和测试结果。
|
5月前
|
Java 测试技术 API
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
【6月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 3
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
|
4月前
|
安全 Java API
Java基础之日期和时间
【7月更文挑战第3天】 Java 8之前的日期时间处理涉及Date、Calendar、SimpleDateFormat及TimeZone类。Date是不可变对象,但不推荐直接调整时间。Calendar提供日期计算,而SimpleDateFormat用于格式化。Date和Calendar非线程安全,处理时区需用TimeZone。Java 8引入了java.time包,包含Instant、LocalDate等类,提供更现代、线程安全和高效的API,例如Instant用于时间戳,LocalDateTime表示日期和时间,ZonedDateTime处理时区。下节将探讨Java 8的新API。
102 2