• 使用Calendar类对时间进行处理


    1. 如何獲取時間

    Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
    ​
    // 字符串轉時間
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    Date date = format.parse(str)
    // 時間轉字符串
    String str = format.format(date)
    ​
    Calendar rightNow = Calendar.getInstance();//获得当前时间
    public class LearnTimeDemo {
        public static void main(String[] args) {
        
            //获得系统时间,一般用long类型的,得到此事件,currentTimeMillis()方法精确到毫秒
            long TimeNow = System.currentTimeMillis();      
    ​
            Date date=new Date(TimeNow);        //用Date类来转化这个时间
            
            Calendar calendar=Calendar.getInstance();       //获得此刻的时间
            
            System.out.println("Calendar获得的时间"+calendar.getTime());
        }
    }

    2. 用Calendar类提供的方法获取年、月、日、时、分、秒

    int year = cal.get(Calendar.YEAR); //
    int month = cal.get(Calendar.MONTH) + 1; // 月 默认是从0开始 即1月获取到的是0
    int day = cal.get(Calendar.DAY_OF_MONTH); // 日,即一个月中的第几天
    int hour = cal.get(Calendar.HOUR_OF_DAY); // 小时
    int minute = cal.get(Calendar.MINUTE); //
    int second = cal.get(Calendar.SECOND); //

    3. 使用Calendar類計算時間

    3.1 计算相差天数 计算二个时间间隔天数,保留整数
      Calendar cal = Calendar.getInstance();
        cal.setTime(date1);
        long time1 = cal.getTimeInMillis();
        cal.setTime(date2);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        Integer count = Integer.parseInt(String.valueOf(between_days));
    3.2 计算相差天数 计算二个时间间隔天数,保留一位小数
      long timeout = endDate.getTime() - startDate.getTime();
        double quot = 0.0;
        quot = ((double) timeout) / 1000 / 60 / 60 / 24;
    ​
        DecimalFormat formater = new DecimalFormat();
        formater.setMaximumFractionDigits(1);   // 用于设置数字的小数部分所允许的最大位数
        formater.setGroupingSize(0);
        formater.setRoundingMode(RoundingMode.FLOOR);   // 设置舍入模式
        String retQuot = formater.format(quot);
        
        setGroupingSize():
        括号中放分隔长度,比如放3,则原数字串每小数点前每过三位为一组。
    ​
        setGroupingUsed():
        用于确定是否进行对数字串进行分组。比如括号里放false,则表示不允许数字串进行分组。
        
        // RoundingMode 用法
        RoundingMode.CEILING:取右边最近的整数
        RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整
        RoundingMode.FLOOR:取左边最近的正数
        RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数
        RoundingMode.HALF_UP:四舍五入,负数原理同上
        RoundingMode.HALF_EVEN:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入
    3.3 Java中 DecimalFormat 用法详解
    // DecimalFormat是**NumberFormat十进制数字格式的具体子类
    public class TestNumberFormat{ 
      public static void main(String[]args){
        double pi = 3.1415927; //圆周率
        //取一位整数
        System.out.println(new DecimalFormat("0").format(pi));   //3
        //取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(pi)); //3.14
        //取两位整数和三位小数,整数不足部分以0填补。
        System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
        //取所有整数部分
        System.out.println(new DecimalFormat("#").format(pi));   //3
        //以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16%
         long c =299792458;  //光速
        //显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(c)); //2.99792E8
        //显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(c)); //29.9792E7
        //每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(c));   //299,792,458
        //将格式嵌入文本
        System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c)); 
      }  
    }
    ​
    ​
    //创建一个默认的通用格式  NumberFormat和DecimalFormat是线程不安全的
            NumberFormat numberFormat = NumberFormat.getInstance();
            DecimalFormat numberDecimalFormat;
            //捕捉异常,以防强制类型转换出错
            try {
                //强制转换成DecimalFormat
                numberDecimalFormat = (DecimalFormat) numberFormat;
                //保留小数点后面三位,不足的补零,前面整数部分 每隔四位 ,用 “,” 符合隔开
                numberDecimalFormat.applyPattern("#,####.000");
                //设置舍入模式 为DOWN,否则默认的是HALF_EVEN
                numberDecimalFormat.setRoundingMode(RoundingMode.DOWN);
                //设置 要格式化的数 是正数的时候。前面加前缀
                numberDecimalFormat.setPositivePrefix("Prefix  ");
                System.out.println("正数前缀  "+numberDecimalFormat.format(123456.7891));
                //设置 要格式化的数 是正数的时候。后面加后缀
                numberDecimalFormat.setPositiveSuffix("  Suffix");
                System.out.println("正数后缀  "+numberDecimalFormat.format(123456.7891));
                //设置整数部分的最大位数
                numberDecimalFormat.setMaximumIntegerDigits(3);
                System.out.println("整数最大位数 "+numberDecimalFormat.format(123456.7891));
                //设置整数部分最小位数
                numberDecimalFormat.setMinimumIntegerDigits(10);
                System.out.println("整数最小位数 "+numberDecimalFormat.format(123456.7891));
                //设置小数部分的最大位数
                numberDecimalFormat.setMaximumFractionDigits(2);
                System.out.println("小数部分最大位数 "+numberDecimalFormat.format(123.4));
                //设置小数部分的最小位数
                numberDecimalFormat.setMinimumFractionDigits(6);
                System.out.println("小数部分最小位数 "+numberDecimalFormat.format(123.4));
            }catch (Exception e){
                e.printStackTrace();
            }

    4. 将日期向后延长

     // sourceDate 源日期
        // number     延长几天
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(sourceDate);
        calendar.add(calendar.DATE, number);  
        Date result = calendar.getTime();

    5. 获取指定日期所在月份指定時間 时间格式yyyyMMdd

    5.1 指定日期所在月份开始的时间
     SimpleDateFormat aDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        Calendar c = Calendar.getInstance();
        c.setTime(date);
    ​
        // 设置为1号,当前日期既为本月第一天
        c.set(Calendar.DAY_OF_MONTH, 1);
        // 将小时至0
        c.set(Calendar.HOUR_OF_DAY, 0);
        // 将分钟至0
        c.set(Calendar.MINUTE, 0);
        // 将秒至0
        c.set(Calendar.SECOND, 0);
        // 将毫秒至0
        c.set(Calendar.MILLISECOND, 0);
        // 获取本月第一天的时间
        date = aDateFormat.format(c.getTime());
    5.2 指定日期所在月份结束的时间
     SimpleDateFormat aDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        
        // 设置为当月最后一天
        c.set(Calendar.DAY_OF_MONTH,c.getActualMaximum(Calendar.DAY_OF_MONTH));
        // 将小时至23
        c.set(Calendar.HOUR_OF_DAY, 23);
        // 将分钟至59
        c.set(Calendar.MINUTE, 59);
        // 将秒至59
        c.set(Calendar.SECOND, 59);
        // 将毫秒至999
        c.set(Calendar.MILLISECOND, 999);
        // 获取本月最后一天的时间
        date = aDateFormat.format(c.getTime());

    6. 判断一个时间是否在一个时间段内

    Calendar date = Calendar.getInstance();
        date.setTime(nowTime);  // 当前时间
    ​
        Calendar begin = Calendar.getInstance();
        begin.setTime(beginTime);  // 开始时间
    ​
        Calendar end = Calendar.getInstance();
        end.setTime(endTime);   // 结束时间
    ​
        b = date.after(begin) && date.before(end);

     

  • 相关阅读:
    [那些你所不知道的鬼畜写法]数据结构小探
    索引
    数据类型
    存储引擎
    事务
    视图、触发器、存储过程、自定义函数
    约束
    数据库介绍
    线程基础、线程池
    操作系统基础
  • 原文地址:https://www.cnblogs.com/mhcdxds/p/14454933.html
Copyright © 2020-2023  润新知