java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

2022年11月20日08:58:34

常用时间类有Date,Calendar,LocalDate,SimpleDateFormat,时间戳等等。

Date类及其方法

java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)
使用new Date() 创建时,如图,忽略sun.util包,创建Date 主要是util包和sql包两种方式;
使用的是idea编辑器,可通过快捷键ctrl+h 查看类关系,如下图,sql.Date类继承于util包。
java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

1)使用java.util 创建

java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)
Date主要使用无参构造和long类型创建,其余已过时。

Date date=newDate();//接收一个 long 类型的参数,该参数是从 1970-01-01 00:00:00.000 到当前时间的毫秒数
Date date2=newDate(1574673617000L);
System.out.println(date);
System.out.println(date2);
//显示结果,默认时间格式如下
Mon Nov2517:20:59 CST2019
Mon Nov2517:20:17 CST2019

date主要方法
java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

  • compareTo ’
//使用上面创建的date和date2
System.out.println(date.compareTo(date2));
System.out.println(date2.compareTo(date));
System.out.println(date2.compareTo(newDate(1574673617000L)));
//显示结果如下//将需要比较的日期和括号内日期相比较1//括号内日期比前面日期小-1//括号内日期比前面日期大0//两日期相等
  • clone
Object clone= date.clone();
  • getTime
//获取时间毫秒数long time= date.getTime();
System.out.println(date.getTime());
  • after,before
//判读时间前后boolean before= date.before(date2);boolean after= date.after(date2);
  • toInstant
Instant instant= date.toInstant();
System.out.println(instant);
//显示标准时间,时区相差82019-11-25T09:55:27.543Z
  • from
Date from= Date.from(instant);
System.out.println(from);

下面一些过时方法,使用Clandar类方法代替了
java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

2)使用java.sql 创建

java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)
发现sql包下的Date类没有无参构造方法,使用util包的Date注入一个long类型的date

 Date date=newDate(newjava.util.Date().getTime());
 System.out.println(date);
//显示结果,日期格式如下,说明sql包的Date类重写了toString 方法,没有了详细时间2019-11-25

java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)
sql包下的Date类继承于util包的Date,方法基本一致,sql包的Date只有日期,适用于sql,一般使用util包就行。

  • toLocalDate()
//转换成LocalDate
 LocalDate localdate= date.toLocalDate();
java sql.date和util.date区别

不同点

1. java.sql.date是针对sql使用的,只有日期部分,没有时间部分

2. java.util.date是java.sql.date的父类

之间的转换关系

java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

Calendar类

Calendar是一个抽象类不能像Date类直接通过new创建。通过内部的getInstance方法创建。

Calendar instance= Calendar.getInstance();
System.out.println(instance);
//显示结果,默认toString比较复杂
java.util.GregorianCalendar[time=1574735939207,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=10,WEEK_OF_YEAR=48,WEEK_OF_MONTH=5,DAY_OF_MONTH=26,DAY_OF_YEAR=330,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=38,SECOND=59,MILLISECOND=207,ZONE_OFFSET=28800000,DST_OFFSET=0]

常用方法如下
java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

  • compareTo
//和Date类方法类似,返回值1//括号内日期比前面日期小-1//括号内日期比前面日期大0//两日期相等int i= instance.compareTo(Calendar.getInstance());
  • getTime
//返回Date类
Date time= instance.getTime();
System.out.println(time);
  • get
    重要方法
//传入Calendar类定义的常量,返回对应信息int i1= instance.get(Calendar.DAY_OF_WEEK);int i2= instance.get(Calendar.DAY_OF_MONTH);
System.out.println(i1);
System.out.println(i2);//326
  • setTime
//设置时间,传入Date类型
instance.setTime(newDate());
  • set
//设置时间,通过Calendar常量
instance.set(Calendar.YEAR,2019);
instance.set(Calendar.MONTH,11);//直接设置,后面还可以接时分秒
instance.set(2019,11,26);

新日期类LocalDate,LocalTime,LocalDateTime

前面sql包Date类的toLocalDate()方法,就是将其转换成新日期类。

Java 8新增了LocalDate和LocalTime接口,方法更加实用。
java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。
Java 8中,日期和时间被明确划分为LocalDate和LocalTime,LocalDate无法包含时间,LocalTime无法包含日期。

构造方法私有了,通过内置的now()方法新建

LocalDate date= LocalDate.now();
LocalTime time= LocalTime.now();
LocalDateTime dateTime= LocalDateTime.now();
System.out.println(date);
System.out.println(time);
System.out.println(dateTime);
//显示如下2019-11-2613:57:57.4402019-11-26T13:57:57.440

常用方法
java时间相关类详解(Date类,Calendar类,LocalDate类,时间格式化,时间戳)

格式化日期,SimpleDateFormat

  • Date格式化
    SimpleDateFormat.parse()方法将String转为Date
 Date date=newDate();
 System.out.println(date);//使用SimpleDateFormat,自定义格式
  SimpleDateFormat dateFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String format= dateFormat.format(date);
  System.out.println(format);//转化后是String,将String 转换成Datetry{
      Date parse= dateFormat.parse(format);}catch(ParseException e){
      e.printStackTrace();}
//显示如下
Tue Nov2615:00:04 CST20192019-11-2615:00:04
Tue Nov2615:00:04 CST2019
  • Calendar格式化
//getTime方法将Calendar转换成Date后在格式化
 Calendar instance= Calendar.getInstance();
 Date date= instance.getTime();
 SimpleDateFormat dateFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String format= dateFormat.format(date);
 System.out.println(format);
  • LocalDate格式化
LocalDate date= LocalDate.now();
LocalTime time= LocalTime.now();
LocalDateTime dateTime= LocalDateTime.now();
System.out.println(date);
System.out.println(time);
System.out.println(dateTime);//显示如下2019-11-2615:15:23.7222019-11-26T15:15:23.722

格式化
localDate 自带format()方法,需要传参DateTimeFormatter

DateTimeFormatter dateTimeFormatter= DateTimeFormatter.ofPattern("yyyyMMdd");
String format= date.format(dateTimeFormatter);
System.out.println(format);
DateTimeFormatter dateTimeFormatter2= DateTimeFormatter.ofPattern("HH:mm:ss");
String format2= time.format(dateTimeFormatter2);
System.out.println(format2);//显示如下2019112616:08:52

时间戳(timestamp)

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

  • 获取当前时间戳
//获取时间戳,单位毫秒long l= System.currentTimeMillis();
  System.out.println(l);//
  Date date=newDate();long time= date.getTime();
  System.out.println(time);//long timeInMillis= Calendar.getInstance().getTimeInMillis();
  System.out.println(timeInMillis);
  • 时间戳转日期
//Date构造可直接转换
Date date1=newDate(1574758172536L);
System.out.println(date1);
参考:

Date类常用方法
LocalDate的常用方法

  • 作者:Small_Mayi
  • 原文链接:https://blog.csdn.net/qq_33411202/article/details/103240597
    更新时间:2022年11月20日08:58:34 ,共 4979 字。