Java Date和Calendar类

Java Date和Calendar类

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:

作者:陈剑波

撰写时间:2019年07月28日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Date和Calendar类

一、Date类

Java提供了Date类来处理日期、时间(此处的Date是指java.util包下的Date类,而不 是java.sql包下的Date类),Date对象既包含日期,也包含时间。Date类从JDK1.0起 就开始存在了,因为它历史悠久,所以它的大部分构造器、方法都已经过时,不再推荐使用了。

示例代码:

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

/**

 * @author KO.ZERO Date JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所

 *         以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。 构造器

 *         Java.util.Date的构造器还剩下两个构造器,其他都已经过时(@Deprecated注解,表

 *         已经不再推荐使用,使用会有警告,并且可以会导致程序性能或者安全性方面的问题)

 */

public class DateClassDemo {

    public static void main(String[] args) {

        // Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。

        Date date = new Date();// 构造器

        System.out.println(date.toString());

        System.out.println(date.clone());//clone():返回此对象的副本。

        // equals(Object obj):比较两个日期是否相等。当且仅当参数不为空并且是一个日期对象,表示与该对象相同的时间点(以毫秒为单位)时,结果才为真。

        System.out.println(date.equals(date.clone()));

        // getTime() 返回自 1970  1  1  00:00:00 GMT 以来此 Date 对象表 示的毫秒数。

        System.out.println(date.getTime());

        //setTime(long time):设置此 Date 对象,以表示 1970  1  1  00:00:00 GMT 以后 time 毫秒的时间点。

//      date.setTime(0);

        // 分别使用Date类的构造方法创建两个Date对象。在创建完第一个 Date

        // 对象后,使用 Thread.sleep() 方法让程序休眠 60 秒,然后再创建第二个 Date

        // 对象,这样第二个 Date 对象所表示的时间将会在第一个 Date 对象所表示时间之后。

        try {

            Thread.sleep(60000);// 暂停 1 分钟

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        // currentTimeMillis():返回以毫秒为单位的当前时间。该 方法是system中的方法。用来往数据库中存储时间的好方法!

        System.out.println(System.currentTimeMillis());

        // Date(long date):分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为历元

        // epoch,即 1970  1  1  00:00:00 GMT)以来的指定毫秒数。

        Date date2 = new Date(System.currentTimeMillis());// 构造器

        System.out.println(date2);

        // 常用方法

        // after(Date when):测试此日期是否在指定日期之后。

        System.out.println(date.after(date2));

        // before(Date when):测试此日期是否在指定日期之前。

        System.out.println(date.before(date2));

        //compareTo(Date anotherDate):比较两个日期的顺序。

        //如果参数日期等于这个日期,则返回值0;如果日期在Date参数之前,则该值小于0;如果日期在Date参数之后,则值大于0

        System.out.println(date.compareTo(date2));

        //通过向SimpleDateFormat 的构造函数传递格式字符串"yy-MM-dd HH:mm:ss", 我们就能够指明自己想要的格式。

        //说明: yyyy-MM-dd-HH-mm:ss:ms  yyyy MM dd (大写为24进制,小写为12进制)mm ss 微妙ms

        SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//格式化当前系统日期

        // format():方法可以把Date的数据类型转成特定格式的String类型数据

        String string = dateFormat.format(date2);

        System.out.println(string);

        try {//parse():方法可以把String类型的字符串转成特定格式的Date类型数据

            Date date3 = dateFormat.parse(string);

            System.out.println(date3);

        } catch (ParseException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

运行结果:

Wed Aug 07 11:16:47 GMT+08:00 2019

Wed Aug 07 11:16:47 GMT+08:00 2019

true

1565147807421

1565147867481

Wed Aug 07 11:17:47 GMT+08:00 2019

false

true

-1

19-08-07 11:17:47

Wed Aug 07 11:17:47 GMT+08:00 2019

 

二、Calendar类

由于Date类过于古老,许多的构造器和方法都已经过时。从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,dar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

示例代码:

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

/**

 * @author KO.ZERO Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程

 *         序员来说是透明的,只需要使用getInstance方法创建即可。

 */

public class CalendarClassDemo {

    public static void main(String[] args) {

        // getInstance():获取使用默认时区和区域设置的日历。返回的日历基于默认时区中的当前时间和默认地区。

        Calendar calendar = Calendar.getInstance();

        // 创建 Calendar对象后,可以通过 Calendar对象中的一些方法来处理日期、时间。

        // Calendar类的常用方法

        // get(int field):返回给定日历字段的值。

        System.out.println(":" + calendar.get(Calendar.YEAR));// 获取年份

        // 月是从0开始(0~11),所以需要+1

        // 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。

        System.out.println(":" + (calendar.get(Calendar.MONTH) + 1));

        System.out.println(":" + calendar.get(Calendar.DAY_OF_MONTH));

        System.out.println(":" + calendar.get(Calendar.HOUR_OF_DAY));

        System.out.println(":" + calendar.get(Calendar.MINUTE));

        System.out.println(":" + calendar.get(Calendar.SECOND));

        // set(int field, int value):将给定的日历字段设置为给定值。该方法有多个重载

        calendar.set(Calendar.YEAR, 2019);

        calendar.set(Calendar.MONTH, Calendar.MAY);// 使用英文的十二个月的单词

        calendar.set(Calendar.DAY_OF_MONTH, 8);

        calendar.set(Calendar.HOUR_OF_DAY, 8);// 24小时制的小时

        // Calendar.DAY_OF_WEEK:星期几 //Calendar.HOUR 12小时制的小时

        calendar.set(Calendar.MINUTE, 8);

        calendar.set(Calendar.SECOND, 8);

        // getTime():返回一个表示此 Calendar 时间值(从历元至现在的毫 秒偏移量)的Date对象。

        System.out.println(calendar.getTime());

        // 格式化日期

        SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");

        String string = dateFormat.format(calendar.getTime());

        System.out.println(string);

        // add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的 时间量。

        calendar.add(Calendar.HOUR_OF_DAY, 5);// 加五个小时

        String string2 = dateFormat.format(calendar.getTime());

        System.out.println(string2);

        calendar.add(Calendar.HOUR_OF_DAY, -6);// 减六个小时

        String string3 = dateFormat.format(calendar.getTime());

        System.out.println(string3);

        // roll(int field, int amount):向指定日历字段添加指定(有符号的)时间量,不更改 更大的字段。

        calendar.roll(Calendar.DATE, 7);// 加七天

        System.out.println(calendar.getTime());

        calendar.roll(Calendar.DATE, -9);// 减九天

        //add方法会产生其他相关时间属性的连动变化 //roll方法只是对相应时间属性的域内做变化

        System.out.println(calendar.getTime());

        // Calendar 类型转换为 Date 类型:

        Date date = calendar.getTime();

        // Date 类型转换为 Calendar 类型

        calendar.setTime(date);

        //setTime(Date date):使用给定的 Date 设置此 Calendar 的时间。

        calendar.setTime(new Date());

        string = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar

                .getTime());

        System.out.println(string);

        //compareTo(anotherCalendar):返回如果参数所表示的时间等于本日历所表示的时间,则为0;如果本日历的时间在参数所表示的时间之前,则为小于0的值;

        //如果该日历的时间在参数表示的时间之后,则该值大于0

        Calendar calendar2 = Calendar.getInstance();

        string2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar2.getTime());

        System.out.println(string2);

        calendar.add(Calendar.HOUR, -5);//减五个小时

        System.out.println("时间比较:" + calendar.compareTo(calendar2));

    }

}

运行结果

:2019

:8

:7

:15

:45

:1

Wed May 08 08:08:08 GMT+08:00 2019

19-05-08 08:08:08

19-05-08 13:08:08

19-05-08 07:08:08

Wed May 15 07:08:08 GMT+08:00 2019

Mon May 06 07:08:08 GMT+08:00 2019

2019-08-07 15:45:01:65

2019-08-07 15:45:01:65

时间比较:-1

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值