• Java基础——常用类之日期时间类


      如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔)

      如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil)

      如果又不能升级JDK,又无法引入第三方依赖库,那么你可以需要了解以下的时间日期相关的API(无奈之举)

    一、常用日期类

       

    二、System类

      我们比较常用的时间相关的方法:

      

      我们这里特别注意一下它的定义:返回的是与1970.1.1的时间差(单位:毫秒),由这个定义我们也容易知道它一般不单独使用(意义不大),

      最常见的用途就是:计算时间差:

    public static void main(String[] args) {
            long start = System.currentTimeMillis();
            for (int i = 0; i<100; i++) {
                if (i % 2 == 0) {
                    System.out.println("左青龙");
                } else {
                    System.out.println("右白虎");
                }
            }
            long end = System.currentTimeMillis();
            System.out.println("用时(ms):"+ (end - start));
        }

    三、Date类

      1.构造方法(过时方法不再赘述)

      

      实例化Date:(已重写toString())

      public static void main(String[] args) {
            // 通过构造器构建Date实例
            Date date1 = new Date();
            System.out.println(date1);// Thu Sep 14 20:32:16 CST 2017
        }

      //使用long型有参构造请带上后缀L(new Date(13807966980L))

      2.常用方法(可以看到API中很多方法都已经过时)

      getTime()——返回对应的毫秒数

       public static void main(String[] args) {
            // 通过构造器构建Date实例
            Date date1 = new Date();
            System.out.println(date1.getTime());// 1505392872857
        }

    四、SimpleDateFormat

      由于Date类不利于国际化,已经由java.text包(实际上与格式化和解析的类基本都在此包下)下的SimpleDateFormat替代,

      作为一个与语言环境有关的方式来格式化和解析日期的具体类

      1.构造方法:

      

        也可以解析例如Sep等的英文缩写月份!

       

       2.常用方法:(用于解析与格式化)

      format(Date date)——格式化,将日期格式化为字符串

      pattern格式详解可以参见API(常用:yyyy-MM-dd HH:mm:ss)

    public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            // 格式化
            String s = sdf.format(new Date());
            System.out.println(s);// 2017-09-14
        }

    parse(String str)——解析,将字符串解析为日期

    public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            // 解析
            try {
                Date date = sdf.parse("2008-8-8");
                System.out.println(date);// Fri Aug 08 00:00:00 CST 2008
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

    五、Calendar

      主要用于完成字段之间的相互操作的一个抽象基类

      1.构造方法(由于是抽象类,无法直接new)

      

      2.常用方法

        get(int field)——获取字段的方法

      

      其中涉及的属性可以参见API的属性列表,其中的注意点:

    MONTH月份从0开始,也就是1-12月对应 0-11,在Calender中有常量,如Calender.MAY等常量来表示!

    DAY_OF_WEEK从1开始,也就是周日到周六对应 1-7

      实例:

    public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar c;
            // 解析
            try {
                Date date = sdf.parse("2017-9-14 21:42:18");
                // 使用Date作为参数初始化日历类
                c = Calendar.getInstance();
                c.setTime(date);
                // 验证日历设置的时间是否生效
                String s = sdf.format(c.getTime());
                System.out.println(s);
                /*通过日历对日期进行字段的操作,获取年月日,操作年月日等*/
                // 显示年份
                int year = c.get(Calendar.YEAR);
                System.out.println("年份:"+year);
                // 显示月份(从0开始)
                int month = c.get(Calendar.MONTH);
                System.out.println("月份:"+month);
                // 周几(从周日(对应1)开始)
                int weekDay = c.get(Calendar.DAY_OF_WEEK);
                System.out.println("周几:"+weekDay);
                // 本月第N天
                int day = c.get(Calendar.DAY_OF_MONTH);
                System.out.println("本月第几天:"+day);
                /*利用日历操作日期*/
                // 2小时后
                c.add(Calendar.HOUR_OF_DAY, 2);
                int hour = c.get(Calendar.HOUR_OF_DAY);
                System.out.println("2小时后:"+hour);
                // 15分钟前
                c.add(Calendar.MINUTE, -15);
                int min = c.get(Calendar.MINUTE);
                System.out.println("15分钟前:"+min);
                // 重置为当前时间
                c.setTime(new Date());
                Date now = c.getTime();
                String s1 = sdf.format(now);
                System.out.println("当前时间:"+s1);
            } catch (ParseException e) {
                e.printStackTrace();
            }

    结果:

      

  • 相关阅读:
    D. Time to Run【构造】
    P3388 割顶 【求割点个数】
    处女座的测验 素数,构造
    处女座与复读机 DP
    求一个分数小数点后指定位数的数字
    安卓开发创建活动,布局,添加按钮,she使用Toast,设菜单,使菜单相关联等操作
    三进制 处女座的砝码 高精度
    上海高校程序设计联赛 D-CSL的字符串 栈模拟
    区间DP经典 石子合并
    区间DP 洛谷P2858牛奶零食
  • 原文地址:https://www.cnblogs.com/zhuangwei1015/p/10010022.html
Copyright © 2020-2023  润新知