Java 8 新增 API
Java 8 部分新类 描述Instant 表示时间线上的某一瞬间,用秒和纳秒表示。
Duration 表示时间差,用秒和纳秒表示。
LocalDate 表示没有时区信息的日期,例如生日、法定假日等。
LocalTime 表示没有时区信息的一天中的本地时间。
LocalDateTime 表示没有时区信息的日期和时间
ZonedDateTime 表示日期和时间,包括时区信息
DateTimeFormatter 将日期时间对象格式化为字符串。
众所周知,在 Java 8 中添加了一个全新的日期时间 API 位于 java.time 包中,主要变化是,自1970年1月1日以来,日期和时间现在不再由单个毫秒数表示,而是由1970年1月1日以来的秒数和纳秒数表示。
秒数既可以是正的,也可以是负的,用 long 表示。纳秒数始终为正,由 int 表示。
Java 7 具有以下日期和时间类和方法:
Java 7 日期时间常用类/方法 描述System.currentTimeMillis() 自1970年1月1日起以毫秒为单位返回当前日期和时间的静态方法
java.util.Date 表示日期和时间的类。这个类中的大多数方法都是不推荐的。
java.sql.Date 表示日期的类。这个date类与JDBC一起使用。
java.sql.Timestamp 表示日期和时间的类。这个date和time类与JDBC一起使用。
java.util.Calendar 日历类的基类。 有方法做日期和时间算术,比如将日期或月份添加到另一个日期。
java.util.GregorianCalendar 一个 Calendar 类的子类。代表公历,在今天的西方世界大部分地区使用。拥有 Calendar 中的所有做日期和时间算术的方法。
java.util.TimeZone 一个表示时区的类,在跨时区执行日历计算时非常有用。
应该使用所有这些类中的哪一个取决于想要做什么,如果你需要做简单的计时, System.currentTimeMillis() 方法就可以了。
如果只需要一个对象来保存日期,例如作为简单域模型对象中的属性,则可以使用 java.util.Date 类。
如果需要读取和写入数据库的日期和时间,则使用 java.sql.Date 和 java.sql.Timestamp 类。
如果您需要进行日期计算,例如将日期或月份添加到另一个日期,或者查看工作日(星期一,星期二等)这些给定日期,或者转换时区之间的日期和时间,请使用 java.util.Calendar 和 java .util.GregorianCalendar 类。
System.currentTimeMillis()currenttimemillis() 静态方法以毫秒为单位返回自1970年1月1日以来的时间。返回的值是long。这里有一个例子:
long timeNow = System.currentTimeMillis();这个返回值可以用来初始化 java.util.Date, java.sql.Date, java.sql.Timestamp 和 java.util.GregorianCalendar 对象,它还可以用于在程序中测量时间。
currenttimemillis() 方法的粒度大于 1 毫秒,这取决于操作系统,还可能更大,许多操作系统以几十毫秒为单位测量时间。如果需要更精确的计时,请使用 System.nanoTime() ,但是这个方法返回的时间是从任意一个时刻计算的,甚至有可能是负数,所以不能用于初始化日期时间对象,只适合用于计算两个时间点的时间差。
java.util.Date用来表示日期,包含年月日时分秒 ,目前该类中的大多数方法都不赞成使用了,一般用 Calendar 类来代替它,但还是有必要简单了解一下。
下面是一些使用例子:
Date 类的默认构造器,源码是这样的:
public Date() { this(System.currentTimeMillis()); }也可以使用一个 long 型的有参构造函数:
Date date = new Date(long);Date 类还有一个 getTime() 实例方法,这个方法的返回值就是 new Date(long) 时指定的 long 参数。
从 Java 8 开始,新增了和 Instant 互相转换的方法,关于 Instant 请参考本文下部分,这里了解就行:
static Date from(Instant instant); Instant toInstant(); java.sql.Date此类是上述 java.util.Date 类的子类,所以它继承了 java.util.Date 的所有方法和字段。一般在 JDBC API 中使用它,比如可以在 PreparedStatement 上设置日期,或者从 ResultSet 获取日期,
和 java.util.Date 最大的区别就是它只记日期,不记时间,即只有年月日,如果构造的时候包含了时间信息,那么时间信息会被舍弃,如果要记时间,需要用到 java.sql.Timestamp 类。
java.sql.Timestamp