使用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);

 

 

posted @ 2021-02-27 10:22  卖火柴的小道士  阅读(329)  评论(0编辑  收藏  举报