视频链接: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个新的公开类型,大多数开发者,大概将只会用到其中的三分之一