您的位置 首页 java

Java时间类介绍:Date的使用

在Java中用来表示日期的类有很多,最早使用的应该是Date类。Date类大概有两个,分别是:java.util.Date和java.sql.Date。前者对应我们日常生活中常用的日期类,而后者则表示数据库中使用的日期类。两者区别在于,java.sql.Date虽然继承了java.util.Date, 但是在java.sql.Date中移除了时分秒的概念,也就是说我们无法从java.sql.Date中来获取时分秒。这一点可以从源码中得到证实。

下面是java.sql.Date中关于获取时分秒方法的声明:

  // 获取小时
public int getHours() {
        throw new java.lang.IllegalArgumentException();
}

// 获取分
public int getMinutes() {
        throw new java.lang.IllegalArgumentException();
}

// 获取秒
 public int getSeconds() {
        throw new java.lang.IllegalArgumentException();
}  

可以看到,java.sql.Date对继承自java.util.Date的方法进行了重写,使得java.sql.Date不再支持获取时分秒。

当然,即使是java.util.Date, 获取时分秒的方法也已经过时,不再推荐使用。以现在的眼光看来,除了使用Date的默认的构造器来构建一个日期对象外,已经几乎不再使用该类。但是稍微了解一下,和最新的日期类做个对比,才能明白各自的优劣,从而加深理解。

  • 常用的静态方法

java.util.Date的静态方法如下:

  1. public static Date from(Instant instant):根据时刻类来构建java.util.Date对象

java.sql.Date的静态方法如下:

  1. public static Date valueOf(String s):根据字符来构建java.sql.Date对象
  2. public static Date valueOf(LocalDate date):使用Java8新增的LocalDate来构建java.sql.Date对象。

示例代码如下所示:

 public class DateTest {

    public static void main(String[] args) {

        // java.util.Date的静态方法
        Instant now = Instant.now();
        java.util.Date nowDate = java.util.Date.from(now);
        System.out.println("获取的java.util.Date对象为:" + nowDate);

        // java.sql.Date的静态方法
        java.sql.Date date = java.sql.Date.valueOf("2019-03-12");
        System.out.println(date);
        java.sql.Date date2 = java.sql.Date.valueOf(LocalDate.now());
        System.out.println(date2);
    }
}  

执行结果如下图所示:

  • 构造方法

java.util.Date的构造方法如下:

  1. public Date():无参构造器。
  2. public Date(long date) :传入一个日类型转换为距时间原点(1970年1月1日0时0分0秒)所经过的毫秒数。

java.sql.Date的构造方法如下:

  1. public Date(long date):传入一个日类型转换为距时间原点(1970年1月1日0时0分0秒)所经过的毫秒数。

虽然还有其他的构造参数,都是已经被标记为过时的构造器,因此就不再过多介绍。

关于java.util.Date的构造器使用示例代码如下所示:

 public class DateTest {

    public static void main(String[] args) {

        // java.util.Date的构造器
        java.util.Date date = new java.util.Date();
        System.out.println("无参构造器构建的java.util.Date对象:" + date);
        java.util.Date date2 = new java.util.Date(System.currentTimeMillis());
        System.out.println("带参构造器构建的java.util.Date对象为:" + date2);

        // java.sql.Date的构造器
        java.sql.Date date3 = new java.sql.Date(System.currentTimeMillis());
        System.out.println("带参构造器构造的java.sql.Date对象:" + date3);
    }
}  

执行结果如下图所示:

  • 常用方法

以下常用的方法都是java.util.Date和java.sql.Date共有的方法。所以下面的示例代码仅以java.util.Date作为示例。至于java.sql.Date的使用大家类比即可。

  1. public boolean before(Date when):判断当前日期是否在传入的日期之前。
  2. public boolean after(Date when):判断当前的日期是否在传入的日期之后。
  3. public int compareTo(Date anotherDate):比较当前日期和传入日期谁在前谁在后。
  4. public void setTime(long time):修改日期的值,入参为距时间原点经过的毫秒值。
  5. public long getTime():获取当前日期对象距时间原点经过的毫秒值。
  6. public Instant toInstant():将当前的java.util.Date对象变为时刻类表示的对象。

关于java.util.Date的常用使用示例代码如下所示:

 public class DateTest {

    public static void main(String[] args) {

        // 当前日期
        Date date = new Date();
        // 时间原点
        Date date2 = new Date(0);

        // 判断当前日期是否在传入的日期之前
        System.out.println("date是否在date2之前:" + date.before(date2));
        // 判断当前的日期是否在传入的日期之后
        System.out.println("date是否在date2之后:" + date.after(date2));
        // 比较当前日期和传入日期谁在前谁在后:1表示当前日期在后,0表示两者是同一个日期,-1表示传入日期在后。
        System.out.println("date和date2谁在前谁在后:" + date.compareTo(date2));
        // 修改日期的值,入参为距时间原点经过的毫秒值
        date2.setTime(Duration.ofDays(365).toMillis());
        System.out.println("date2设置后卫距时间原点1:" + date2);
        // 获取当前日期对象距时间原点经过的毫秒值
        System.out.println("date距时间原点经过的毫秒值为:" + date.getTime());
        // 将当前的java.util.Date对象变为时刻类表示的对象
        System.out.println("date2变为时刻类为:" + date2.toInstant());
    }
}  

执行结果如下图所示:

Java时间类介绍:Date的使用

文章来源:智云一二三科技

文章标题:Java时间类介绍:Date的使用

文章地址:https://www.zhihuclub.com/176263.shtml

关于作者: 智云科技

热门文章

评论已关闭

5条评论

  1. In a retrospective study from the database of a single university hospital n 10, 506 inpatients it was found that 22 Manual therapy Hands on treatment to the joints, muscles, and incision areas aimed at reducing range of motion problems, scar formation, and pain and swelling Lymphedema treatment Assisting with manual lymphatic drainage, compression bandaging, assessment for garments, and exercise instruction Exercise plan Continued support with an individualized exercise plan during and after treatment and into the survivorship period to reduce side effects such as fatigue, pain, and lymphedema Mina et al

  2. Not all patients with asymptomatic microhematuria require RBUS Early studies verified that LH and FSH pulse frequency are enhanced in hypogonadal men and exogenous testosterone decreases gonadotropin secretion, suggesting that testosterone have an inhibitory effect on GnRH secretion 216, 241

  3. The suddenly rich Silver Wolf is determined to end their does blood pressure medication lisinopril adventure and find a quiet place to live a dementia change in high blood pressure medicine prosperous life

  4. Nolvadex has a great ability to boost, restore or maintain users testosterone levels and bring their body to its normal state as it was before

网站地图