日期时间类

一.Date类

java.util.Date类表示特定的瞬间,精确到毫秒。

关于Date类,其拥有多个都早函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。

1.public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

2.public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00GMT)以来的指定毫秒数。

tips:由于我们处于东八区,所以我们的基准时间为1970年1月1日08:00:00

System.currentTimeMillis():时间原点到当前时间的毫秒数

简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻,例如:

public class Demo07Date {
    public static void main(String[] args) {
        // 获取当前系统一共到1970年1月1日08:00:00一共经历了多少毫秒
         System.out.println(System.currentTimeMillis());
        demo01();
        demo02();

    }
    //Date类空参构造方法
    // 获取当前系统的日期和时间
    private static void demo01(){
        Date date = new Date();
        System.out.println(date); // 不是地址,证明重写了toString()方法
    }

    // Date类含参构造方法
    // 参数:毫秒值
    private static void demo02(){
        Date date = new Date(1613837296858L); // 记住是L型
        System.out.println(date);
    }
}

运行截图:

即:使用System.currentTimeMillis():时间原点到当前时间的毫秒数;使用无参构造方法获得当前日期,精确到毫秒;使用有参构造方法将毫秒值转换为日期

3.getTime():返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数。(将日期转换为毫秒),相当于System.currentTimeMillis()

// Date类的getTime方法
// 返回自时间原点到当前时间的毫秒数
// 相当于System.currentTimeMillis()
private static void demo03(){
    Date date = new Date();
    date.getTime();
}

二.DateFormat类

java.text.DateFormat是日期/时间格式化子类的抽象类,通过这个类可以帮助完成日期和文本之间的转换,也就是可以在Date对象和String对象之间进行来回转换。

格式化:按照指定的格式,从Date对象转换为String对象。

解析:按照指定的格式,从String对象转换为Date对象。

成员方法:String format(Date date) 按照指定模式,把Date日期,格式化为符合模式的字符串

                  Date parse(String source) 把符合模式的字符串,解析为Date日期

构造方法:由于DateFrame为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

常用的格式规则为:

y    年

M    月

d    日

H    时

m    分

s    秒

写对应的模式,会把模式替换成对应的日期和时间:yyyy-MM-dd HH:mm:ss

注意:模式中的字母不能更改,连接模式的符号可以改变。

格式化方法:

private static void demo01(){
    //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
    SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
    // 2.调用SimpleDateFormat对象中的方法format,
    // 按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
    Date date = new Date();
    // date.getTime(); // 获得当前日期
    String d = sdf.format(date); // 按模式格式化当前日期
    System.out.println(date);
    System.out.println(d);
}

解析方法:

private static void demo02() throws ParseException {

    //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
    SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
    // 2.按照构造方法中指定的模式,创建一个符合格式的字符串(文本)
    String str = "21-02-21 00:31:59";
    // 3.调用SimpleDateFormat对象中的方法parse方法解析
    Date date = sdf.parse(str);
    System.out.println(date);
}

 

看API文档可以注意到这个parse方法,声明了一个异常。

查看源码:

public Date parse(String source) throws ParseException

意思:如果字符串和构造方法的模式不一样,那么程序就会抛出此异常。

(调用一个抛出了异常的方法,就必须处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理这个异常。)

 

二.Calendar类

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

获取方式:Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法:

publi static Calendar getInstance():使用默认时区和语言环境获得一个日历。

// 多态写法
Calendar c = Calendar.getInstance();

常用方法:

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

/*
public int get(int field):返回给定日历字段的值
参数:传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR
返回值:日历字段代表的具体值
 */
private static void demo01(){
    Calendar calendar = Calendar.getInstance();
    // 静态修饰的变量或方法都直属类,直接使用类名调用
    int year = calendar.get(Calendar.YEAR);
    System.out.println(year);
    // 西方的月份0-11
    int month = calendar.get(Calendar.MONTH) + 1;
    System.out.println(month);
    int day_of_month = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(day_of_month);
}

public void set(int field,int value):将给定的日历字段设置为给定值

/*
public void set(int field,int value):将给定的日历字段设置为给定值
参数:int field传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR
     int vaule给指定字段设定的值
 */
private static void demo02(){
    Calendar calendar = Calendar.getInstance();
    // 设置为9999年9月9日
    calendar.set(Calendar.YEAR,9999);
    System.out.println(calendar.get(Calendar.YEAR));
    calendar.set(Calendar.MONTH,9);
    System.out.println(calendar.get(Calendar.MONTH));
    // 可以同时设置年月日,set重载方法
    calendar.set(Calendar.YEAR,9999,Calendar.MONTH,9,Calendar.DAY_OF_MONTH,9);
}

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

/*
public abstract void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量
参数:int field传递指定的日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR
     int amount增加减少指定的值,正数增加,负数减少
 */
private static void demo03(){
    Calendar calendar = Calendar.getInstance();
    // 把年增加2年
    calendar.add(Calendar.YEAR,2);
    System.out.println(calendar.get(Calendar.YEAR));
    // 把月份减少1月
    calendar.add(Calendar.MONTH,-1);
    System.out.println(calendar.get(Calendar.MONTH) + 1);
}

public Date getTime():返回一个表示此Calendar的时间值的Date对象

/*
public Date getTime():返回一个表示此Calendar的时间值的Date对象
 */
private static void demo04(){
    Calendar calendar = Calendar.getInstance();
    // 无参构造方法获得当前日期,精确到毫秒
    Date date = new Date();
    date = calendar.getTime();
    // 打印对象,应为地址值,重写了toString方法
    System.out.println(date);
}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值