Java 时间和日期

2019-10-10  本文已影响0人  圣堂刺客_x

1 Date类

1.1 Date类概述

  Date类的大部分方法已经过时了,但是也有一些没有过时的方法。Date类实现时间戳与时间对象的转换,时间戳在日期和时间的计算方面有很重要的意义,因为它是long类型的数。
TestDemo.java

public class TestDemo{
    public static void main(String[] args){
        /*
        时间和日期Date类引包 java.util.Date
        毫秒概念:1000ms = 1s
        System.currentTimeMillis()返回值long类型数值
        时间原点:公元1970年1月1日,午夜00:00:00 毫秒值为0
        
        重要:时间和日期的计算,必须依赖毫秒值
        xxxx-xx-xx = 毫秒
        */
        long time = System.currentTimeMillis();
        System.out.println(time);
        
    }
}

运行结果

  类 Date 表示特定的瞬间,精确到毫秒。Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。

TestDemo.java

import java.util.Date;
public class TestDemo{
    public static void main(String[] args){
        /*
        Date类的空参构造方法
            默认表示当前时间的毫秒值
            返回Date对象
        */
        Date date = new Date();
        System.out.println(date);
        
        /*
        Date类的long参数的构造方法
        Date(long) 
            long表示毫秒值
            返回Date对象
        */
        long l = 0L;
        Date date1 = new Date(l);
        System.out.println(date1);
        
    }
}

运行结果

1.2 Date类常用方法

TestDemo.java

import java.util.Date;
public class TestDemo{
    public static void main(String[] args){
        /*
        Date类方法getTime()  返回long 毫秒值
        将Date表示的日期,转成毫秒值
        */
        Date date1 = new Date();
        long time1 = date1.getTime();
        System.out.println(time1);
        
        /*
        Date类方法setTime方法
        将long毫秒值转换成日期对象
        Date的构造方法也能完成这个功能
        */
        Date date2 = new Date();
        long time = 1530846211513L;
        date2.setTime(time);
        System.out.println(date2);
    }
}

2 DateFormat类

2.1 DateFormat类概述

  DateFormat 是日期/时间格式化子类的抽象类(DateFormat不能直接创建对象,要调用它的方法可以创建子类对象),它以与语言无关的方式格式化并解析日期或时间。
  日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
  通过SimpleDateFormat类可以帮我们完成日期和文本之间的转换。

2.2 日期格式

  要格式化一个当前语言环境下的日期也就是(日期 -->文本),要通过下面的方法来完成。DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。
构造方法

DateFormat类方法

TestDemo.java

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

public class TestDemo{
    public static void main(String[] args){
        /*
        对日期进行格式化(自定义)
        对日期格式化类java.text.DateFormat抽象类,它有普通方法,也有抽象方法
        实际是使用子类java.text.SimpleDateFormat,他是普通类
        */
        
        /*
        如何对日期格式化
        步骤:
            1、创建SimpleDateFormat对象
                在类构建方法中,写入字符串的日期格式(自定义)
            2、SimpleDateFormat调用方法format对日期进行格式化
                String format(Date date) 传递日期对象
        
        日期模式:
            yyyy —— 年份
            MM —— 月份
            dd —— 天数
            HH —— 小时
            mm —— 分钟
            ss —— 秒数
        */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        String s = sdf.format(new Date());   //传入匿名对象
        System.out.println(s);
    }
}

运行结果

  DateFormat类的作用:即可以将一个Date对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个Date对象。
  指定格式的具体规则我们可参照SimpleDateFormat类的说明,这里做简单介绍,规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出:

当出现y时,会将y替换成年
当出现M时,会将M替换成月
当出现d时,会将d替换成日
当出现H时,会将H替换成时
当出现m时,会将m替换成分
当出现s时,会将s替换成秒

2.3 DateFormat类常用方法

image.png

  format方法,用来将Date对象转换成String
  parse方法,用来将String转换成Date(转换时,该String要符合指定格式,否则不能转换)。
TestDemo.java

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

public class TestDemo{
    public static void main(String[] args) throws Exception{
        /*
        DateFormat类方法parse
        将字符串解析为时间对象
        Date parse(String s)  将字符串变成日期对象
        String ==》Date
        */
        
        /*
        步骤:
            1、创建SimpleDateFormat对象
                在类构建方法中,写入字符串的日期格式(自定义)
            2、SimpleDateFormat调用方法parse
                传递字符串,返回Date
        */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("1995-09-01");
        System.out.println(date);
        
    }
}

3 Calendar类

3.1 Calendar类概念

  Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。
  Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:
Calendar类静态方法

代码演示TestDemo.java

import java.util.Calendar;

public class TestDemo{
    public static void main(String[] args) throws Exception{
        /*
        日历类java.util.Calendar,他是抽象类,必须使用他的子类对象
        
        Calendar类写了静态方法getInstance(),直接返回子类对象
        不需要直接new子类对象,通过静态方法直接获取
        
        */
        Calendar c = Calendar.getInstance();  //多态
        
        System.out.println(c);
        
    }
}

运行结果


4.2 Calendar类常用方法

演示代码TestDemo.java

import java.util.Calendar;
import java.util.Date;

public class TestDemo{
    public static void main(String[] args) throws Exception{
        /*
        Calendar类的get(int v)方法,获取时间字段值
            获取相关字段的值
            YEAR 年
            MONTH 月,从0开始算起,最大11;0代表1月,11代表12月。
            DATE 天
            HOUR 时
            MINUTE分
            SECOND秒
        */
        Calendar c = Calendar.getInstance();  //多态
        printCalendar(c);
        
        /*
        Calendar类的set方法,设置日历指定字段的值
        set(int field,int value)
            field  设置的是哪个日历字段
            value  设置后的具体数值
        set(int year,int month,int day)
        */
        
        //方法一
        Calendar c1 = Calendar.getInstance();  //多态
        c1.set(Calendar.YEAR, 2020);
        c1.set(Calendar.MONTH, 4);
        c1.set(Calendar.DATE, 20);
        printCalendar(c1);
        
        //方法二
        Calendar c2 = Calendar.getInstance();
        //设置时间为2020年5月20日
        c2.set(1990,11,30);
        printCalendar(c2);

        
        /*
        Calendar类的add方法,指定字段增加某值
        日历的偏移量,可以指定一个日历中的字段,进行整数的偏移
        add(int field,int value)
        
        */
        Calendar c3 = Calendar.getInstance();
        //修改当前时间为3天后
        c3.add(Calendar.DAY_OF_MONTH, 3);
        //修改当前时间为5小时后
        c3.add(Calendar.HOUR, 5);
        printCalendar(c3);
        
        
        //获取该日历对象转成的日期对象
        //用法不多
        Calendar c4 = Calendar.getInstance();
        Date date = c4.getTime();

        
    }
    
    public static void printCalendar(Calendar c){
        //获取年份
        int year = c.get(Calendar.YEAR);
        //获取月份
        int month =c.get(Calendar.MONTH)+1;
        //获取天数(月份中的天数)
        int day =c.get(Calendar.DAY_OF_MONTH);
        //获取小时
        int hour =c.get(Calendar.HOUR_OF_DAY);
        //获取分钟
        int minute =c.get(Calendar.MINUTE);
        //获取秒
        int second =c.get(Calendar.SECOND);
        //打印年月日
        System.out.println(year+"年"+month+"月"+day+"日 "+hour+"时"+minute+"分"+second+"秒");
    }
}

运行结果


3.3 注意事项

西方星期的开始为周日,中国为周一。
在Calendar类中,月份的表示是以0-11代表1-12月。
日期是有大小关系的,时间靠后,时间越大。

4 日期相关类练习

4.1 求出自己已经出生多少天

思路:
  1.获取当前时间的时间戳
  2.获取自己出生日期对应的时间戳
  3.两个时间相减
代码实现:

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

public class TestDemo{
    public static void main(String[] args) throws Exception{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dstr="2000-08-08 00:08:08 ";
        Date date=sdf.parse(dstr);
        long s1=date.getTime();//将时间转为毫秒
        long s2=System.currentTimeMillis();//得到当前的毫秒
        int day=(int)((s2-s1)/1000L/60L/60L/24L);
        System.out.println("距现在已有"+day+"天,你得抓紧时间学习了" );
    }
}
上一篇下一篇

猜你喜欢

热点阅读