Java8之前的日期相关类

System类的概述

基本概念:java.lang.System类中提供了一些类字段和方法
常用方法:
static long currentTimeMillis() 返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差

  1. public class SystemTest {
  2. public static void main(String[] args) {
  3. //1.获取当前系统时间距离1970年1月1日0分0秒的参数
  4. long msec = System.currentTimeMillis();
  5. System.out.println("当前系统时间距离好描述为:"+msec);
  6. //通常用于测试某一段代码的执行效率
  7. }
  8. }

Date类的概述

基本概念:java.util.Date类主要用于描述特定的时间,年月日时分秒,可以精确到毫秒
常用的方法:

Date() 使用无参的方式构造对象,也就是当前系统时间
Date(long date) 根据参数指定毫秒数构造对象, 参数为距离1970年1月1日0时0分0秒的毫秒数
long getTime() 获取调用对象距离1970年1月1日0时0分0秒的毫秒数
void setTime(longtime) 设置调用对象为距离基准时间time毫秒的时间点
  1. package com.lagou.task13;
  2. import java.util.Date;
  3. /**
  4. * @author lijing
  5. * @date 2020/9/30 14:05
  6. * @description
  7. */
  8. public class DateTest {
  9. public static void main(String[] args) {
  10. //1.使用无参方式构造Date对象并打印
  11. Date d1 = new Date();
  12. System.out.println(d1);
  13. System.out.println("------------");
  14. long mses = System.currentTimeMillis();
  15. Date d2 = new Date(mses);
  16. System.out.println(d2);
  17. System.out.println("------------");
  18. //获取调用对象距离1970年1月1日0时0分0秒的好描述
  19. long time = d1.getTime();
  20. System.out.println(time);
  21. System.out.println("------------");
  22. //设置调用对象所表示的时间点作为参数指定的好描述
  23. d2.setTime(2000);
  24. System.out.println(d2);//1970 1 1 08 00 02
  25. }
  26. }

SimpleDateFormat类的概述

基本概念:java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换

SimpleDateFormat() 使用无参方式构造对象
SimpleDateFormat(String pattern) 根据参数指定的模式来构造对象,模式主要有: y-年 M-月 d-日H-时 m-分 s-秒
final String format(Date date) 用于将日期类型转换为文本类型
Date parse(String source) 用于将文本类型转换为日期类型
  1. public class SimpleDateFormatTest {
  2. public static void main(String[] args) throws ParseException {
  3. //1.获取当前系统时间
  4. Date date = new Date();
  5. System.out.println(date);
  6. //2.构造SimpleDateFormat类型的对象并指定格式
  7. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  8. //3.实现日期类型向文件类型的转换打印
  9. String format = sdf.format(date);
  10. System.out.println(format);
  11. //4.实现文本类型到日期类型并打印
  12. Date parse = sdf.parse(format);
  13. System.out.println(parse);
  14. }
  15. }

Calendar类的概述

  • java.util.Calender类主要用于描述特定的瞬间,取代Date类中的过时方法实现全球化。
  • 该类是个抽象类,因此不能实例化对象,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高利历),对应世界上绝大多数国家/地区使用的标准日历系统。 |
    static Calendar getInstance() |
    用于获取Calendar类型的引用 | | —- | —- | |
    void set(int year, int month, int date, int hourOfDay, int minute, int second) |
    用于设置年月日时分秒信息 | |
    Date getTime() |
    用于将Calendar类型转换为Date类型 | |
    void set(int field, int value) |
    设置指定字段的数值 | |
    void add(int field, int amount) |
    向指定字段增加数值 |
  1. package com.lagou.task13;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. /**
  6. * @author lijing
  7. * @date 2020/9/30 15:09
  8. * @description
  9. */
  10. public class CalendarTest {
  11. public static void main(String[] args) {
  12. Calendar instance = Calendar.getInstance();
  13. instance.set(2008,8-1,8,8,8,8);
  14. Date time = instance.getTime();
  15. System.out.println(time);
  16. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  17. // instance.add();
  18. String format = sdf.format(time);
  19. System.out.println(format);
  20. instance.add(Calendar.MONTH,2);
  21. System.out.println(sdf.format(instance.getTime()));
  22. //考点一:既然Calendar类是抽象类不能创建对象,那么是如何获得Calendar类型的引用呢?
  23. //解析:利用多态,由源码可知,返回的并不是Calendar类型的对象,而是Calendar的子类的对象,形成了多台
  24. //多态的适用场合之三
  25. }
  26. }

多态的使用场合

通过方法的参数传递形成多态;

  1. public static void draw(Shape s){
  2. s.show();
  3. }
  4. draw(new Rect(1, 2, 3, 4));

在方法体中直接使用多态的语法格式

  1. Account acc = new FixedAccount();

通过方法的返回值类型形成多态

  1. Calender getInstance(){
  2. return new GregorianCalendar(zone, aLocale);
  3. }

Java8中的日期相关类

由来和概述

JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:

  1. Date类中的年份是从1900开始的,而月份都从0开始。
  2. 格式化只对Date类有用,对Calendar类则不能使用。
  3. 非线程安全等.
  • Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
  • java.time包:该包日期/时间API的基础包。
  • java.time.chrono包:该包提供对不同日历系统的访问。
  • java.time.format包:该包能够格式化和解析日期时间对象。
  • java.time.temporal包:该包包含底层框架和扩展特性。
  • java.time.zone包:该包支持不同时区以及相关规则的类。

    LocalDate类

    基本概念:java.time.LocalDate类主要用于描述年月日格式的日期信息,该类不表示时间和时区信息
    常用方法:

static LocalDate now()

在默认时区中从系统时钟获取当前日期

LocalTime类

基本概念:java.time.LocalTime类主要用于描述时间信息,可以描述时分秒以及纳秒
常用方法:


static LocalTime now()

从默认时区的系统时间中获取当前时间

static LocalTime now(Zoneld zone)

获取指定时区的当前时间

LocalDateTime类

基本概念:java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,如2007-12-03T10:15:21


static LocalDateTime now()

从默认时区的系统时间中获取
当前日期时间

static LocalDateTime of(int year, int month, int
dayOfMonth, int hour, int minute, int second)

根据参数指定的年月日时分秒信息来设置日期时间

int getYear()
int getMonthValue()
int getDayOfMonth()
int getHour()
int getMinute()
int getSecond()

获取年份字段的数值
获取1到12之间的月份字段
获取日期字段
获取小时数
获取分钟数
获取秒数

LocalDateTime withYear(int year)
LocalDateTime withMonth(int month)
LocalDateTime withDayOfMonth(int dayOfMonth)
LocalDateTime withHour(int hour)
LocalDateTime withMinute(int minute)
LocalDateTime withSecond(int second)
|
设置为参数指定的年
设置为参数指定的月
设置为参数指定的日
设置为参数指定的时
设置为参数指定的分
设置为参数指定的秒
| |
LocalDateTime plusYears(long years)
LocalDateTime plusMonths(long months)
LocalDateTime plusDays(long days)
LocalDateTime plusHours(long hours)
LocalDateTime plusMinutes(long minutes)
LocalDateTime plusSeconds(long seconds)
|
加上参数指定的年
加上参数指定的月
加上参数指定的日
加上参数指定的时
加上参数指定的分
加上参数指定的秒
| |
LocalDateTime minusYears(long years)
LocalDateTime minusMonths(long months)
LocalDateTime minusDays(long days)
LocalDateTime minusHours(long hours)
LocalDateTime minusMinutes(long minutes)
LocalDateTime minusSeconds(long seconds) |
减去参数指定的年
减去参数指定的月
减去参数指定的日
减去参数指定的时
减去参数指定的分
减去参数指定的秒 |

  1. package com.lagou.task13;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.LocalTime;
  5. /**
  6. * @author lijing
  7. * @date 2020/9/30 15:48
  8. * @description
  9. */
  10. public class LocalDateTimeTest {
  11. public static void main(String[] args) {
  12. LocalDate now = LocalDate.now();
  13. System.out.println("获取到的当前日期为:"+now);
  14. LocalTime now1 = LocalTime.now();
  15. System.out.println("获取到的当前时间为:"+now1);
  16. LocalDateTime now2 = LocalDateTime.now();
  17. System.out.println("获取到的当前日期时间为:"+now2);
  18. System.out.println("--------------------------");
  19. //4.设置指定年月日时分秒
  20. LocalDateTime of = LocalDateTime.of(2008, 8, 8, 20, 8, 8);
  21. //使用ctrl+F12来查找指定的方法
  22. System.out.println("指定的日期时间为:"+of);//自动调用toString
  23. System.out.println("年:"+of.getYear());
  24. System.out.println("月:"+of.getMonthValue());
  25. System.out.println("日:"+of.getDayOfMonth());
  26. System.out.println("时:"+of.getHour());
  27. System.out.println("分:"+of.getMinute());
  28. System.out.println("秒:"+of.getSecond());
  29. System.out.println("--------------------------");
  30. //5.实现特征的设置并打印
  31. //与String类型相似,调用本身的数据内容不会改变,返回值相当于创建了一个新的对象,由此证明了不可变性
  32. LocalDateTime localDateTime = of.withYear(2012);
  33. System.out.println("localDateTime="+localDateTime);//localDateTime=2012-08-08T20:08:08
  34. System.out.println("of="+of);//localDateTime=2012-08-08T20:08:08
  35. System.out.println("--------------------------");
  36. //6.实现特征的增加并打印
  37. LocalDateTime localDateTime1 = of.plusYears(2);
  38. System.out.println("localDateTime1="+localDateTime1);//localDateTime1=2010-08-08T20:08:08
  39. System.out.println("--------------------------");
  40. //7.实现特征的介减小并打印
  41. LocalDateTime localDateTime2 = of.minusYears(4);
  42. System.out.println("localDateTime2="+localDateTime2);
  43. }
  44. }

instant类

基本概念:java.time.Instant类主要用于描述瞬间的时间点信息。
常用方法:


static Instant now()

从系统时钟上获取当前时间

OffsetDateTime atOffset(ZoneOffset offset)

将此瞬间与偏移量组合以创建偏移日期时间

static Instant ofEpochMilli(long
epochMilli)

根据参数指定的毫秒数来构造对象,参数为距离1970年1月1
日0时0分0秒的毫秒数

long toEpochMilli()

获取距离1970年1月1日0时0分0秒的毫秒数
  1. package com.lagou.task13;
  2. import java.time.Instant;
  3. import java.time.LocalDateTime;
  4. import java.time.OffsetDateTime;
  5. import java.time.ZoneOffset;
  6. /**
  7. * @author lijing
  8. * @date 2020/9/30 16:11
  9. * @description
  10. */
  11. public class InstantTest {
  12. public static void main(String[] args) {
  13. //本初子午线
  14. Instant now = Instant.now();
  15. System.out.println("获取到的当前系统时间:"+now);
  16. //东八区
  17. LocalDateTime now1 = LocalDateTime.now();
  18. System.out.println("获取到的默认系统时间:"+now1);
  19. //2.加上时区所差的八个小时
  20. OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
  21. System.out.println("偏移后的时间:"+offsetDateTime);
  22. System.out.println("-----------------------------");
  23. //3.获取距离1970.1.1.0.0的毫秒数
  24. long l = now.toEpochMilli();
  25. System.out.println("获取到的毫秒差为:"+l);
  26. Instant instant = Instant.ofEpochMilli(l);
  27. System.out.println("参数指定的好描述构造出来的对象:"+instant);
  28. }
  29. }

DateTimeFormatter类

基本概念:java.time.format.DateTimeFormatter类主要用于格式化和解析日期。
常用方法:


static DateTimeFormatter ofPattern(String pattern)

根据参数指定的模式来获取对象

String format(TemporalAccessor temporal)

将参数指定日期时间转换为字符串

TemporalAccessor parse(CharSequence text)

将参数指定字符串转换为日期时间

总结

  1. java8之前的日期时间类

date类 Calendar SimpleDateFormat类 概念 和常用方法

  1. java8中的日期实践类

LocalDate类 LocalTime类 LocalDateTime类 Instant类 DateTimeFormatter类 概念和常用方法