美文网首页
Java 时间和日期

Java 时间和日期

作者: 圣堂刺客_x | 来源:发表于2019-10-10 22:11 被阅读0次

    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+"天,你得抓紧时间学习了" );
        }
    }
    

    相关文章

      网友评论

          本文标题:Java 时间和日期

          本文链接:https://www.haomeiwen.com/subject/opqxmctx.html