JDK 8之前的日期时间API

一、System 静态方法

System类(java.lang.System)提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差

  • 此方法适于计算时间差,称为时间戳

  • 计算世界时间的主要标准有:

    • UTC(Coordinated Universal Time)

    • GMT(Greenwich Mean Time)

    • CST(Central Standard Time)

二、Date类

2.1 java.util.Date

构造器:

Date();//使用无参构造器创建的对象可以获取本地当前时间。
Date(long date);//创建指定毫秒数的Date对象

2.2 java.sql.Date

对应着数据库中的日期类型变量。

//创建java.sql.Date对象
java.sql.Date date3 = new java.sql.Date(35235325345L);
System.out.println(date3);//1971-02-13

//如何将java.util.Date对象转换为java.sql.Date对象
//情况一:
//        Date date4 = new java.sql.Date(2343243242323L);
//        java.sql.Date date5 = (java.sql.Date) date4;
//情况二:
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());

三、Calendar类

Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

3.1 实例化

方式一:使用Calendar.getInstance()静态方法

方式二:调用它的子类GregorianCalendar的构造器。

Calendar calendar = Calendar.getInstance();
//System.out.println(calendar.getClass());

3.2 常用方法

  • get()方法:来取得想要的时间属性信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、 MINUTE、SECOND。

  • set()方法:public void set(int field,int value),将当前对象的时间属性field设置成为具体的值value。

  • add()方法:public void add(int field,int amount),将当前对象的时间属性field增加amount值(amount为负数则表示减法)。

  • getTime():public final Date getTime(),日历类---> Date。

  • setTime():public final void setTime(Date date),Date ---> 日历类。

  • 注意:

    • 获取月份时:一月是0,二月是1,以此类推,12月是11

    • 获取星期时:周日是1,周二是2 ……周六是7

Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 使用给定的 Date 设置此 Calendar 的时间
date = new Date(234234235235L);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 8);
System.out.println("当前时间日设置为8后,时间是:" + calendar.getTime());
calendar.add(Calendar.HOUR, 2);
System.out.println("当前时间加2小时后,时间是:" + calendar.getTime());
calendar.add(Calendar.MONTH, -2);
System.out.println("当前日期减2个月后,时间是:" + calendar.getTime());

3.3 局限性

  • 可变性:像日期和时间这样的类应该是不可变的。

  • 偏移性:Date中的年份是从1900开始的,而月份都从0开始。

  • 格式化:格式化只对Date有用,Calendar则不行。

  • 线程安全性:不是线程安全的。

  • 其他:不能处理闰秒等。

四、SimpleDateFormat类

Date类的API不易于国际化并且大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

  • 格式化:将一个日期转换为一个字符串称为格式化,实现方式:使用构造器

    • SimpleDateFormat() :默认的模式和语言环境创建对象

    • public SimpleDateFormat(String pattern):该构造方法可以用参数pattern 指定的格式创建一个对象。

    • 通过上述两种构造器生成的对象通过调用public String format(Date date)方法格式化时间对象date。

  • 解析:解析是格式化的逆过程,即将一个字符串转化为一个日期,实现方式:调用parse()方法。

    • public Date parse(String source):从给定字符串的开始解析文本,以生成 一个日期。

    • 需要注意的是,此处的source字符串要求必须是符合在格式化中通过构造函数生成的SimpleDateFormat对象的格式,也即构造器的参数”partten“(没有则表示默认情况)。

练习:字符串"2020-09-08"转换为java.sql.Date

String birth = "2020-09-08";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(birth);
//System.out.println(date);//此时是java.util.Date
java.sql.Date birthDate = new java.sql.Date(date.getTime());
System.out.println(birthDate);

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/javase/classes/1903/jdk8zqdrpsjapi/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录