13、时间类的使用

1.时间类的介绍

时间类的结构关系

  1. 时间类如上,我们常用的是日历类Calendar,java.util.Date类,日期格式化SimpleDateFormat类。
  2. java.util.Date类,用于获取系统当前时间,返回的是一个距离1970年1月1日 00:00:00的毫秒数
  3. DateFormat类继承自Format类,他们都是抽象类,是一个日期的格式化类,用来格式化日期,不过通常使用SimpleDateFormat类来格式化日期

2. Date类----获取系统当前时间

  在开发过程中,通常很多人都习惯使用new Date()来获取当前时间。new Date()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date(),效率上会高一点。如果需要在同一个方法里面多次使用new Date(),通常性能就是这样一点一点地消耗掉的。

package com.zhaoyunlong.date;

import java.util.Date;

public class DateTest1 {
    public static void main(String[] args) {
        //获得系统的时间,单位为毫秒
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println(currentTimeMillis);

        //获得系统的时间,单位为毫秒
        Date date = new Date();
        System.out.println(date.getTime());

    }
}

运行结果:
时间戳输出结果

3.DateFormat

  这是一个日期的格式化类,用来格式化日期的,它是一个抽象类,继承了Format类。

3.1 DateFormat的实例化

  DateFormat是一个抽象类,按照以住的思路,直接使用其子类实例化即可。但是DateFormat 类本身的内部提供了可以直接为其实例化的操作。

//得到日期的DateFormat对象:
public static final DateFormat getDateInstance();

//得到日期时间的DateFormat对象:
public static final DateFormat getDateTimeInstance();

//使用DateFormat类格式化Date类日期
public final String format(Date date)

3.2 日期格式

import java.text.DateFormat ;
import java.util.Date ;
public class DateDemo03{
    public static void main(String args[]){
        DateFormat df1 = null ;     // 声明一个DateFormat
        DateFormat df2 = null ;     // 声明一个DateFormat
        df1 = DateFormat.getDateInstance() ;    // 得到日期的DateFormat对象
        df2 = DateFormat.getDateTimeInstance() ;    // 得到日期时间的DateFormat对象
        System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化
        System.out.println("DATETIME:" + df2.format(new Date())) ;   // 按照日期时间格式化

    }
}

运行结果如下:
日期时间

4. SimpleDateFormat类

SimpleDateFormat函数的继承关系:
java.lang.Object
|
+—-java.text.Format
   |
   +—-java.text.DateFormat
      |
      +—-java.text.SimpleDateFormat

4.1 日期模板

  根据模板的格式来转化日期
日期表示

4.2 SimpleDateFormat类使用

  在构造对象时要传入日期格式模板

//构造方法:
public SimpleDateFormat(String pattern)

//转换:
public Date parse(String source)throws ParseException //-->此时取得的是全部时间数。

//格式化:
public final String Format(Date date)   //-->将时间重新格式化成字符串显示。

4.3 案例

4.3.1 把Date的时间对象转化成指定的日期格式

package com.zhaoyunlong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FormatDateTime {
    public static void main(String[] args) {
        SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        SimpleDateFormat myFmt1 = new SimpleDateFormat("yy/MM/dd HH:mm");
        SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()
        SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
        SimpleDateFormat myFmt4 = new SimpleDateFormat(
                "一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
        Date now = new Date();
        System.out.println(now.toString()); // Fri Jul 02 21:59:17 CST 202
        System.out.println(myFmt.format(now)); // 2021年07月02日 21时59分17秒
        System.out.println(myFmt1.format(now)); // 21/07/02 21:59
        System.out.println(myFmt2.format(now)); // 2021-07-02 21:59:17
        System.out.println(myFmt3.format(now)); // 2021年07月02日 21时59分17秒 周五
        System.out.println(myFmt4.format(now)); // 一年中的第 183 天 一年中第27个星期 一月中第1个星期 在一天中21时 CST时区


    }
}

运行结果如下:
日期

4.3.2 把给定的字符串中的日期提取为Date

这样做,通常是一个日期字符串,但不是想要的格式,可以先转化为Date,再转化为其它格式。

package com.zhaoyunlong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo2 {
    public static void main(String args[]) {
        String strDate = "2008-10-19 10:11:30.345";
        // 准备第一个模板,从字符串中提取出日期数字
        String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
        // 准备第二个模板,将提取后的日期数字变为指定的格式
        String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒";

        SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);        // 实例化模板对象
        SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);        // 实例化模板对象
        Date d = null;
        try {
            d = sdf1.parse(strDate);   // 将给定的字符串中的日期提取出来
            System.out.println(d);
        } catch (Exception e) {            // 如果提供的字符串格式有错误,则进行异常处理
            e.printStackTrace();       // 打印异常信息
        }
        System.out.println(sdf2.format(d));    // 将日期变为新的格式
    }
}

说明:

  1. DateFormat 可以直接使用,但其本身是一个抽象类,它内部提供一个实例化对象的方法,可以根据Locate指定的区域得到对应的日期时间格式

  2. SimpleDateFormat 类是DateFormat 类的子类,一般情况下, DateFormat 类很少会直接使用,而都使用SimpleDateFormat 类完成。

5. Calendar类

  1.Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。

  2. 该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为protected 。

  3. Calendar提供了一种类方法getInstance ,用于获取此类型的一般有用的对象。 Calendar的getInstance方法返回一个Calendar对象,其日历字段使用当前日期和时间进行初始化:

	Calendar rightNow = Calendar.getInstance();

5.1 获取时间

package com.zhaoyunlong.date;

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        // 使用默认时区和语言环境获得一个日历
        Calendar calendar = Calendar.getInstance();
        // 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
        System.out.println("calendar----" + calendar);
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        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));
    }
}

运行结果
在这里插入图片描述

5.2 设置时间

月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 2 月 15 日除夕当晚的倒计时的最后一秒: 2021-02-15 23:59:59
可以这样:

	Calendar cal = Calendar.getInstance();
	// 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
	// cal.set(year, month, date, hourOfDay, minute, second);
	cal.set(2021, 1, 15, 23, 59, 59);

或者也可以单个字段一一设置:

// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
	cal.set(Calendar.YEAR, 2021);
	cal.set(Calendar.MONTH, Calendar.FEBRUARY);
	cal.set(Calendar.DAY_OF_MONTH, 15);
	cal.set(Calendar.HOUR_OF_DAY, 23);
	cal.set(Calendar.MINUTE, 59);
	cal.set(Calendar.SECOND, 59);
	System.out.println(cal.getTime());

输出结果为:

	Mon Feb 15 23:59:59 CST 2021

5.3 时间计算

add方法

  1. 比如在除夕当晚最后一秒,add 一秒:
	Calendar cal = Calendar.getInstance();
    System.out.println(cal.getTime());
    cal.set(2018, 1, 15, 23, 59, 59);
    cal.add(Calendar.SECOND, 1);
    System.out.println(cal.getTime());

打印时间结果如下,日期会自动进入下一天:

	Thu Feb 15 23:59:59 CST 2018
    Fri   Feb 16 00:00:00 CST 2018
  1. 比如 1 月 31 号的时候,月份加一,会出现怎样结果—>add 月份时,会将不存在的日期归为当月日历的最后一天
	Calendar cal = Calendar.getInstance();
    cal.set(2018, 1, 31, 8, 0, 0);
    System.out.println(cal.getTime());
    cal.add(Calendar.MONTH, 1);
    System.out.println(cal.getTime());

输出 结果

	Wed Jan 31 08:00:00 CST 2018
    Wed Feb 28 08:00:00 CST 2018
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值