关于java中Calendar变量的相关操作和理解

在进行软件构造Lab3实验时,关于储存时间的变量类型Calendar的相关操作属实让我头疼了很久。在网上进行相关查找也是给了一知半解,经过在eclipse上的不断尝试和查看java的相关源码后,我将网上查到的一些关于Calendar变量的常用操作进行了总结。
一:首先我们需要了解Calendar变量:
与Date变量相比,`Date类是类,表示的是特定的,瞬间的,它能精确毫秒,表示的是日期。而Calendar是一种抽象类,相比Date它在操作日历的时候提供了一些方法来操作日历字段,表示的是日历。绝大多数情况下,date要实现的功能都可以通过calendar来实现的,可以简单的认为Calendar是Date的加强版。

二:Date和Calendar类的初始化及转换:
a、Date

  Date date = new Date();
    System.out.println("毫秒:"+date.getTime());//输入毫秒
 
    //时间转字符串
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = sdf.format(date);
    System.out.println("时间转字符串:"+time);
 
    //利用字符串来转时间格式(记得抛出异常)
    String time02 = "2018-09-05";
    SimpleDateFormat  sdf2 = new SimpleDateFormat ("yyyy-MM-dd");
    Date date2 = sdf2.parse(time02);
    System.out.println("字符串转时间格式:"+date2);

b、Calendar

 // 使用默认时区和语言环境获得一个日历
    Calendar cal = Calendar.getInstance();
    // 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
    System.out.println("年:" + cal.get(Calendar.YEAR));
    System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
    System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
    System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
    System.out.println("分:" + cal.get(Calendar.MINUTE));
    System.out.println("秒:" + cal.get(Calendar.SECOND));
 
    //手动设置某个日期
    Calendar cal02 = Calendar.getInstance();
    //注意,设置时间的时候月份的下标是在0开始的
    //设置时间不一定要这6个参数3个参数也是可以的
    cal02.set(2018,9,1,12,0,0);//二零一八年十月一号十二点
    System.out.println(cal02.getTime());

c、Date和Calendar互相转换

1、

Calendar转Date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();


Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String s = simpleDateFormat.format(date);
System.out.println("时间为===="+s);

2、Date转Calendar

Date date2 = new Date();
Calendar cal2 = Calendar.getInstance();
cal2.setTime( date );


Date date2 = new Date();
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date );
System.out.println(cal2.get(Calendar.YEAR) +"-"+(cal2.get(Calendar.MONTH)+1)+"-"+cal2.get(Calendar.DATE));

三:Calendar的相关操作:

  // 字符串转换日期格式 
    // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    // 接收传入参数 
    // String strDate = args[1]; 
    // 得到日期格式对象 
    // Date date = fmtDateTime.parse(strDate); 
   
    // 完整显示今天日期时间 
    String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date()); 
    System.out.println(str); 
   
    // 创建 Calendar 对象 
    Calendar calendar = Calendar.getInstance(); 
   
    try 
    { 
      // 对 calendar 设置时间的方法 
      // 设置传入的时间格式 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s"); 
      // 指定一个日期 
      Date date = dateFormat.parse("2013-6-1 13:24:16"); 
      // 对 calendar 设置为 date 所定的日期 
      calendar.setTime(date); 
   
      // 按特定格式显示刚设置的时间 
      str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); 
      System.out.println(str); 
    } 
    catch (ParseException e) 
    { 
      e.printStackTrace(); 
    } 
   
    // 或者另一種設置 calendar 方式 
    // 分別爲 year, month, date, hourOfDay, minute, second 
    calendar = Calendar.getInstance(); 
    calendar.set(2013, 1, 2, 17, 35, 44); 
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); 
    System.out.println(str); 
   
    // Calendar 取得当前时间的方法 
    // 初始化 (重置) Calendar 对象 
    calendar = Calendar.getInstance(); 
    // 或者用 Date 来初始化 Calendar 对象 
    calendar.setTime(new Date()); 
   
    // setTime 类似上面一行 
    // Date date = new Date(); 
    // calendar.setTime(date); 
   
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()); 
    System.out.println(str); 
   
    // 显示年份 
    int year = calendar.get(Calendar.YEAR); 
    System.out.println("year is = " + String.valueOf(year)); 
   
    // 显示月份 (从0开始, 实际显示要加一) 
    int month = calendar.get(Calendar.MONTH); 
    System.out.println("nth is = " + (month + 1)); 
   
    // 本周几 
    int week = calendar.get(Calendar.DAY_OF_WEEK); 
    System.out.println("week is = " + week); 
   
    // 今年的第 N 天 
    int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR); 
    System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR); 
   
    // 本月第 N 天 
    int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH); 
    System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH)); 
   
    // 3小时以后 
    calendar.add(Calendar.HOUR_OF_DAY, 3); 
    int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY); 
    System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY); 
   
    // 当前分钟数 
    int MINUTE = calendar.get(Calendar.MINUTE); 
    System.out.println("MINUTE = " + MINUTE); 
   
    // 15 分钟以后 
    calendar.add(Calendar.MINUTE, 15); 
    MINUTE = calendar.get(Calendar.MINUTE); 
    System.out.println("MINUTE + 15 = " + MINUTE); 
   
    // 30分钟前 
    calendar.add(Calendar.MINUTE, -30); 
    MINUTE = calendar.get(Calendar.MINUTE); 
    System.out.println("MINUTE - 30 = " + MINUTE); 
   
    // 格式化显示 
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); 
    System.out.println(str); 
   
    // 重置 Calendar 显示当前时间 
    calendar.setTime(new Date()); 
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()); 
    System.out.println(str); 
   
    // 创建一个 Calendar 用于比较时间 
    Calendar calendarNew = Calendar.getInstance(); 
   
    // 设定为 5 小时以前,后者大,显示 -1 
    calendarNew.add(Calendar.HOUR, -5); 
    System.out.println("时间比较:" + calendarNew.compareTo(calendar)); 
   
    // 设定7小时以后,前者大,显示 1 
    calendarNew.add(Calendar.HOUR, +7); 
    System.out.println("时间比较:" + calendarNew.compareTo(calendar)); 
   
    // 退回 2 小时,时间相同,显示 0 
    calendarNew.add(Calendar.HOUR, -2); 
    System.out.println("时间比较:" + calendarNew.compareTo(calendar)); 
  
   // 得微秒级时间差 
   long val = calendarEnd.getTimeInMillis() - calendarBegin.getTimeInMillis(); 
  // 换算后得到天数 
   long day = val / (1000 * 60 * 60 * 24);
   //也可以对Calender变量进行两个getTime操作得到val差值再换算
   
   //对于Calendar大小的比较,直接调用Calendar的Compare方法进行比较,前者大于后者返回正数,相等为0,小于为负数
   

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值