一篇文章概括 Java Date Time 的使用

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 dateNow = new Date(); // 使用当前日期和时间创建

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygsxy.html