java 日期类

java.util.Date

Date有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和第二个值。 它还允许格式化和解析日期字符串。 但这些功能的API不适合国际化。 从JDK 1.1开始, Calendar类应该用于在日期和时间字段之间进行转换,并且DateFormat类应用于格式化和解析日期字符串。 在相应的方法Date被弃用。

一些计算机标准是根据格林尼治标准时间(GMT)定义的,相当于世界时间(UT)。

  • 在类的所有方法Date接受或返回年,月,日,小时,分钟和秒值,以下表述中使用:

y年代表整数y - 1900

一个月由0到11的整数表示; 0是1月,1是2月,等等; 11月12日。

日期(月的一天)以通常的方式从1到31的整数表示。

一小时由0到23之间的整数表示。因此,从午夜到凌晨1点的时间是小时0,从中午到下午1点的小时是12小时。

一般以0〜59的整数表示。

第二个由0到61的整数表示; 值60和61仅发生在闰秒上,甚至仅在实际上正确跟踪闰秒的Java实现中发生。 由于目前引入闰秒的方式,在同一分钟内不会发生两个闰秒,但是本规范遵循ISO C的日期和时间约定。

构造方法

构造方法 描述
Date() 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。
Date(long date) 分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。 使用System.currentTimeMillis()获得

常用方法

Modifier and Type 方法 描述
boolean after(Date when) 测试此日期是否在指定日期之后。
boolean before(Date when) 测试此日期是否在指定日期之前。
Object clone() 返回此对象的副本。
int compareTo(Date anotherDate) 比较两个日期的顺序。
boolean equals(Object obj) 比较两个日期的相等性。
long getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒
String toString() 将此 Date对象转换为 String的形式:
int getYear() 日期表示的年份减去 1900。已弃用。由Calendar.get(Calendar.YEAR) - 1900
int getMonth() 此日期所表示的月份,返回的值在 0 和 11 之间,值 0 表示 1 月。 已弃用。由Calendar.get(Calendar.MONTH)取代。
String toLocaleString() 此日期的字符串表示形式,使用区域设置约定。已弃用,由DateFormat.format(Date date)替换。
int getDate() 返回此 Date 对象表示的月份中的某一天。返回的值在 1 和 31 之间,表示包含或开始于此 Date 对象表示的时间的月份中的某一天。 已弃用。由Calendar.get(Calendar.DAY_OF_MONTH)取代 。
int getDay() 返回此日期表示的周中的某一天,返回值 (0 = Sunday, 1 = Monday, ···) 。已弃用。由Calendar.get(Calendar.DAY_OF_WEEK)取代 。
int getHours() 此日期所表示的小时。已弃用。由Calendar.get(Calendar.HOUR_OF_DAY) 取代 。
int getMinutes() 返回此日期所表示的小时已经过去的分钟数。返回值在 0 和 59 之间。 已弃用。由Calendar.get(Calendar.MINUTE)取代。
int getMonth() 此日期所表示的月份。返回的值在 0 和 11 之间,值 0 表示 1 月。 已弃用。由Calendar.get(Calendar.MONTH)取代。
int getSeconds() 返回此日期所表示的分钟已经过去的秒数,返回的值在 0 和 61 之间。已弃用。由Calendar.get(Calendar.SECOND) 取代

实例

public class Test {public static void main(String[] args) {//java.util.Date:Date d = new Date();System.out.println(d); //Sun Aug 08 21:21:32 CST 2021System.out.println(d.toString()); //Sun Aug 08 21:21:32 CST 2021System.out.println(d.toGMTString()); //8 Aug 2021 13:21:32 GMTSystem.out.println(d.toLocaleString()); //2021-8-8 21:21:32System.out.println(d.getYear());//121。121+1900=2021System.out.println(d.getMonth());//7 :返回的值在 0 和 11 之间,值 0 表示 1 月。//返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。System.out.println(d.getTime());//1628428892448System.out.println(System.currentTimeMillis());//1628428892448}
}

获取时间差一般用System.currentTimeMillis(),这个方法是静态的,可以类名.方法名直接调用,无方法体,其具体实现并不是java实现,一般会去衡量一些算法所用的时间

java.sql.Date

一个大约一毫秒值的薄包装,允许JDBC将其标识为SQL DATE值。 毫秒值表示1970年1月1日00:00:00.000 GMT之后的毫秒数。

为了符合SQL DATE ,由java.sql.Date实例包装的毫秒值必须通过在实例关联的特定时区中将小时,分钟,秒和毫秒设置为零来“归一化”。

java.sql.Date和java.util.Date的

  • 区别:

    • java.util.Date:年月日 时分秒
    • java.sql.Date:年月日
  • 联系:
    `java.sql.Date(子类) extends java.util.Date (父类)

构造方法

  • Date(long date) 使用给定毫秒时间值构造一个 Date 对象。

    • @param date自1970年1月1日00:00:00 GMT以来的毫秒数。
    • @see java.lang.System.currentTimeMillis()

转换

相互转化

  • util --> sql: