• java日期与时间(详解全部新旧API)


    目录

    前言必读

    二、新与旧API

    新的API:

    旧的API:

    初步使用大全(SimpleDateFormat)

    三、代码例子

    1.获取当前时间

    2.字符串转化为时间 

    四、新的API 

    1.LocalDate(新API)

    2.LocalTime(新API)

    3.LocalDateTime(新API)

    4.DateTimeFormatter(新API)

    5. Instant(新API)

    6.period、Duration(新API)

    7.Duration例子:

    前言必读

    读者手册(必读)_云边的快乐猫的博客-CSDN博客

    1.在时间工具类里面重点学习这两个就差不多了LocalDateTime(全部)DateTimeFormatter(转化格式)

    2.使用date和SimpleDateFormat配套使用(老旧API,线程不安全)。

    使用LocalDateTime或ZonedLocalDateTime时,就用DateTimeFormatter配套使用。(新API,线程安全)。

    二、新与旧API

    新的API:

    Instant:时间戳或者瞬间

    LocalDate:本地日期(不包含具体时间)、period(只能精确到年月日)

    LocalTime:本地时间(不包含年月日)、Duration(只能到天数后面的具体时间)

    LocalDateTime:包含日期和时间(不包时差和时区)

    ZonedDateTime:全包-------其中的localdate代替了Date,DateTimeFormatter代替了SimpleDateFormat,解决了线程不安全的问题

    旧的API:

    不建议使用了,线程不安全(Date ,Calendar,SimpleDateFormat)

    初步使用大全(SimpleDateFormat)

    日期和时间的获取有不同的方式

    年:yyyy

    月:MM

    日:dd

    小时(24小时制):HH

    分:mm

    毫秒:ss

    上下午标识:a

    24小时制:k

    12小时制:K

    时区:zZ

    星期几:E

    年中的天数:D

    年中的周数:w

    月份中的周数(实际计算):W

    三、代码例子

    1.获取当前时间

    1. package bao;
    2. import java.text.SimpleDateFormat;
    3. import java.util.Date;
    4. public class Test {
    5. public static void main(String[] args) {
    6. //1.创建日期对象
    7. Date d = new Date();
    8. //1.格式化日期对象
    9. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a k点,K点,时区:zZ,年中的周数:w,月份中的周数:W,年中的天数:D");
    10. //2.转化成字符串形式,括号里面填的就是首次创建对象的自变量值
    11. String rs = sdf.format(d);
    12. //4.输出当前日期
    13. System.out.println(rs);
    14. }
    15. }

    运行结果:

    2022年06月25日 18:42:38 周一 下午 21点,9点,时区:CST+0800,年中的周数:25,月份中的周数:3,年中的天数:204

    2.字符串转化为时间 

     案例:把2022年08月07日06点05分04秒,往后走2天后5小时4分3秒时间是多少

    1. package bao;
    2. import java.text.ParseException;
    3. import java.text.SimpleDateFormat;
    4. import java.util.Date;
    5. public class Test {
    6. public static void main(String[] args) throws ParseException {
    7. //1.日期储存在字符串中
    8. String dataStr ="2022年08月07日 06:05:04";
    9. //2.开始解析,解析格式对应
    10. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    11. //为了避免异常,要抛出异常,快捷键:alt+回车键
    12. Date d = sdf.parse(dataStr);
    13. //3.计算2天后5小时4分3秒时间
    14. long time = d.getTime()+(2L*24*60*60 + 5*60*60 + 4*60 + 3)*1000;
    15. //输出结果公式:new出来的自定义变量+format+最新的计算后自定义变量
    16. System.out.println(sdf.format(time));
    17. }
    18. }

    运行结果:

    2022年08月09日 11:09:07

    四、新的API 

    1.LocalDate(新API)

    1. package bao;
    2. import java.time.LocalDate;
    3. public class Test {
    4. public static void main(String[] args) {
    5. //本地的日期
    6. LocalDate nowDate = LocalDate.now();
    7. System.out.println(nowDate);
    8. //年
    9. int year = nowDate.getYear();
    10. System.out.println(year);
    11. //月
    12. int month = nowDate.getMonthValue();
    13. System.out.println(month);
    14. //日
    15. int day = nowDate.getDayOfMonth();
    16. System.out.println(day);
    17. //获取其他的参考本文中的LocalDateTime
    18. }
    19. }

     运行结果:

    2022-08-25
    2022
    8
    25 

    2.LocalTime(新API)

    1. package bao;
    2. import java.time.LocalDateTime;
    3. public class Test {
    4. public static void main(String[] args) {
    5. //本地的时间
    6. LocalDateTime nowTime = LocalDateTime.now();
    7. System.out.println(nowTime);
    8. //小时
    9. int hour = nowTime.getHour();
    10. System.out.println(hour);
    11. //分钟
    12. int minute = nowTime.getMinute();
    13. System.out.println(minute);
    14. //秒
    15. int second = nowTime.getSecond();
    16. System.out.println(second);
    17. //纳秒
    18. int nano = nowTime.getNano();
    19. System.out.println(nano);
    20. //转到指定的时间
    21. System.out.println(LocalDateTime.of(1990,10,1,13,14,15,0));
    22. }
    23. }

      运行结果:

    2022-08-25T12:55:57.729269100
    12
    55
    57
    729269100
    1990-10-01T13:14:15 

    3.LocalDateTime(新API)

    例子:

    1. //本地的时间
    2. LocalDateTime today = LocalDateTime.now();
    3. System.out.println(today);
    4. //生日的时间
    5. LocalDateTime birthDate = LocalDateTime.of(1990,10,1,8,7,6);
    6. System.out.println(birthDate);
    7. //开始对比
    8. System.out.println("相差的年数"+ ChronoUnit.YEARS.between(birthDate,today));
    9. System.out.println("相差的月数"+ ChronoUnit.MONTHS.between(birthDate,today));
    10. System.out.println("相差的周数"+ ChronoUnit.WEEKS.between(birthDate,today));
    11. System.out.println("相差的天数"+ ChronoUnit.DAYS.between(birthDate,today));
    12. System.out.println("相差的时数"+ ChronoUnit.HOURS.between(birthDate,today));
    13. System.out.println("相差的分数"+ ChronoUnit.MINUTES.between(birthDate,today));
    14. System.out.println("相差的秒数"+ ChronoUnit.SECONDS.between(birthDate,today));
    15. System.out.println("相差的毫秒数"+ ChronoUnit.MILLIS.between(birthDate,today));
    16. System.out.println("相差的微秒数"+ ChronoUnit.MICROS.between(birthDate,today));
    17. System.out.println("相差的纳秒数"+ ChronoUnit.NANOS.between(birthDate,today));
    18. System.out.println("相差的半天数"+ ChronoUnit.HALF_DAYS.between(birthDate,today));
    19. System.out.println("相差的十年数"+ ChronoUnit.DECADES.between(birthDate,today));
    20. System.out.println("相差的世纪(百年)数"+ ChronoUnit.CENTURIES.between(birthDate,today));
    21. System.out.println("相差的千年数"+ ChronoUnit.MILLENNIA.between(birthDate,today));
    22. System.out.println("相差的纪元数"+ ChronoUnit.ERAS.between(birthDate,today));

    运行结果:

    2022-08-25T10:31:57.963103
    1990-10-01T08:07:06
    相差的年数31
    相差的月数382
    相差的周数1664
    相差的天数11651
    相差的时数279626
    相差的分数16777584
    相差的秒数1006655091
    相差的毫秒数1006655091963
    相差的微秒数1006655091963103
    相差的纳秒数1006655091963103000
    相差的半天数23302
    相差的十年数3
    相差的世纪(百年)数0
    相差的千年数0
    相差的纪元数0 

    4.DateTimeFormatter(新API)

    1. package bao;
    2. import java.time.LocalDateTime;
    3. import java.time.format.DateTimeFormatter;
    4. public class Test {
    5. public static void main(String[] args) {
    6. //本地的时间
    7. LocalDateTime ldt = LocalDateTime.now();
    8. //解析格式化时间
    9. DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    10. //正向格式化
    11. String a = ldt.format(dtf);
    12. System.out.println(a);
    13. //逆向格式化
    14. String b = dtf.format(ldt);
    15. System.out.println(b);
    16. //解析字符串时间,转换成本地时间。dtf是上面那个解析器,代表要解析成那样的格式,注意点:字符串如果和解析器对应不上就会报错的
    17. LocalDateTime JieXi = LocalDateTime.parse("2019-11-11 11:11:11", dtf);
    18. System.out.println(JieXi);
    19. }
    20. }

      运行结果:

    2022-08-25 13:32:06
    2022-08-25 13:32:06
    2019-11-11T11:11:11

    5. Instant(新API)

    例子:

    1. //得到一个时间戳
    2. Instant instant = Instant.now();
    3. System.out.println(instant);
    4. //得到系统的时间戳
    5. Instant instant1 = Instant.now();
    6. System.out.println(instant.atZone(ZoneId.systemDefault()));
    7. //时间戳(instant)转data
    8. Date date = Date.from(instant);
    9. System.out.println(date);
    10. //data转时间戳(instant)
    11. Instant instant2 = date.toInstant();
    12. System.out.println(instant2);

     运行结果:

    2022-08-25T01:52:14.561748900Z
    2022-08-25T09:52:14.561748900+08:00[Asia/Shanghai]
    Thu Aug 25 09:52:14 CST 2022
    2022-08-25T01:52:14.561Z 

    6.periodDuration(新API)

    可以计算出生到现在过去了多久

    period例子:

    1. //本地的时间
    2. LocalDate today = LocalDate.now();
    3. System.out.println(today);
    4. //生日的时间
    5. LocalDate birthDate = LocalDate.of(1990,10,1);
    6. System.out.println(birthDate);
    7. //开始对比
    8. Period period = Period.between(birthDate, today);//第二个参数减第一个参数
    9. System.out.println(period.getYears());
    10. System.out.println(period.getMonths());
    11. System.out.println(period.getDays());

    运行结果: 

    2022-08-25
    1990-10-01
    31

    10
    24

    7.Duration例子:

    1. //本地的时间
    2. LocalDateTime today = LocalDateTime.now();
    3. System.out.println(today);
    4. //生日的时间
    5. LocalDateTime birthDate = LocalDateTime.of(1990,10,1,0,0,0);
    6. System.out.println(birthDate);
    7. //开始对比
    8. Duration duration = Duration.between(birthDate, today);//第二个参数减第一个
    9. System.out.println(duration.toDays());//时间差的天数
    10. System.out.println(duration.toHours());//时间差的小时数
    11. System.out.println(duration.toMinutes());//时间差的分钟数
    12. System.out.println(duration.toMillis());//时间差的毫秒数
    13. System.out.println(duration.toNanos());//时间差的纳秒数

     运行结果: 

     2022-08-25T11:29:10.515524900
    1990-10-01T00:00
    11651
    279635
    16778129
    1006687750515
    1006687750515524900

  • 相关阅读:
    您真的了解Java中的锁吗?这7种不同维度下的锁知道吗?
    Python基本数据类型介绍
    Android RTMP推拉流,MediaCodec硬件编解码
    linux之按键中断
    C++ 32盏灯,利用进制和 与 或 进行设计
    指针——C语言初阶
    sklearn机器学习——day08
    安全狗陈奋:数据安全需要建立在传统网络安全基础之上
    Qt制作18帧丘比特表白意中人、是你的丘比特嘛!!!
    怎么找回回收站删除的文件?轻松恢复数据,就看这3个方法!
  • 原文地址:https://blog.csdn.net/m0_52861000/article/details/126513074