JavaSE 笔记【七】Java常用类之日期时间API

视频链接:Java零基础教程

java.lang.System

System类提供的 public static long currentTimeMillis() 用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差
此方法适于计算时间差

计算世界时间的主要标准有:
UTC(Coordinated Universal Time)
GMT(Greenwich Mean Time)英国/欧洲
CST(Central Standard Time)美国
时区图

java.util.Date

表示特定的瞬间,精确到毫秒

两个构造器

Date() :使用无参构造器创建的对象可以获取本地当前时间
Date(long date)

两个常用方法

方法名说明
getTime()返回自1970年1月1日 00:00:00 GMT 以来此Date对象表示的毫秒数
toString()把此Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyyy 其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat),zzz是时间标准
其他很多方法都过时了

java.sql.Date 对应着数据库中的日期类型的变量。java.sql.Date是java.util.Date的子类

一个构造器

new java.sql.Date(long timeMillis)

一个方法

方法名说明
toString()把此Date对象转换为以下形式的String:yyyy-MM-dd

java.sql.Date 与 java.lang.Date 相互转化

// 如何将java.util.Data对象转换为java.sql.Date对象
// 情况一:
Date date = new java.sql.Date(1617159964348L);
java.sql.Date date1 = (java.sql.Date) date;
// 情况二:
Date date2 = new Date();
java.sql.Date date3 = new java.sql.Date(date2.getTime());
java.text.SimpleDateFormat

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

它允许进行格式化:日期 ->字符串、解析:字符串 -> 日期
格式化
SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern) :该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date) :方法格式化时间对象date
解析
public Date parse(String source) :从给定字符串的开始解析文本,以生成一个日期

练习:字符串“2021-04-01”转化为java.sql.Date;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = "2021-04-01";
Date date = sdf.parse(str);
java.sql.Date date1 = new java.sql.Date(date.getTime());
java.util.Calendar

Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能
获取Calendar实例的方法
使用Calendar.getInstance() 方法
调用它的子类GregorianCalendar的构造器
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND

public void set(int field, int value);
public void add(int field, int amount);
public final Date getTime();
public final void setTime(Date date);

注意:
获取月份时:一月是0,二月是1,依次类推,12月是11
获取星期时:周日是1,周一是2,。。。周六是7

GregorianCalendar gc = new GregorianCalendar();
Calendar calendar = Calendar.getInstance();
System.out.println(gc.getClass()); // class java.util.GregorianCalendar
System.out.println(calendar.getClass());// class java.util.GregorianCalendar
JDK8中新日期时间API

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

可变性:像日期和时间这样的类应该是不可变的
偏移性:Date中的年份是从1900年开始的,而月份都是从0开始的
格式化:格式化只对Date有用,Calendar则不行
此外,它们也不是线程安全的,不能处理闰秒等

总结:对日期和时间的操作一直是Java程序员最痛苦的地方之一

第三次引入的API是成功的,并且Java8中引入的java.time API已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务

Java 8吸收了Joda-Tim的精华,以一个全新的开始为Java创建优秀的API
新的 java.time 中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的Date类新增了toInstant() 方法,用于把Date转换为新的表示形式。这些新增的本地化时间日期API大大简化了日期时间和本地化的管理

说明
java.time包含值对象的基础包
java.time.chrono提供对不同的日历系统的访问
java.time.format格式化和解析时间和日期
java.time.temporal包括底层框架和扩展特性
java.time.zone包含时区支持的类

说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。因此,尽管有68个新的公开类型,大多数开发者,大概将只会用到其中的三分之一

参考:Java 8 新特性 六、新时间日期API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值