Java Calendar类的使用,求两个日期之间的所有日期列表

Calendar 类是一个抽象类,GregorianCalendar 是 Calendar 的一个具体子类。

Calendar类里表示星期的常量的值是星期日为1,星期一为2,以此类推,星期六为7。

表示月份的常量的值是1月份为0,二月份为1,以此类推,十二月份为11。get方法返回的值也遵照此常量值。

1.初始化

Calendar calendar = new GregorianCalendar();

 另说一句,完整显示当前日期:

    String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());  
    System.out.println(str);  

 2.获取时间

    // 使用默认时区和语言环境获得一个日历
    Calendar cal = Calendar.getInstance();
    //Calendar cal = new GregorianCalendar();也可以这样写
    // 赋值时年月日时分秒常用的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));

 

3..设置时间 

注意月份从0开始

 一起设置:

    Calendar cal = Calendar.getInstance();
    // 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
    // cal.set(year, month, date, hourOfDay, minute, second);
    cal.set(2018, 1, 15, 23, 59, 59);

或者是:

      // 对 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);  
  
      // 按特定格式显示刚设置的时间  
      String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime());  
      System.out.println(str);  

设置为当前时间:

    // 初始化 (重置) Calendar 对象  
    calendar = Calendar.getInstance();  
    // 用 Date 来初始化 Calendar 对象  
    calendar.setTime(new Date());

单个设置 :

    // 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
    cal.set(Calendar.YEAR, 2018);
    cal.set(Calendar.MONTH, Calendar.FEBRUARY);
    cal.set(Calendar.DAY_OF_MONTH, 15);
    cal.set(Calendar.HOUR_OF_DAY, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    System.out.println(cal.getTime());

4.计算时间 

(1)add(int field, int amount):

第一个参数为作用域,可以是年,月,日,天,周,小时等,第二个参数为增加的值,可以为负数

比如在除夕当晚最后一秒,add 一秒:

    Calendar cal = Calendar.getInstance();
    System.out.println(cal.getTime());
    cal.set(2018, 1, 15, 23, 59, 59);
    cal.add(Calendar.SECOND, 1);
    System.out.println(cal.getTime());

 打印时间结果如下,日期会自动进入下一天

(2)roll(int field, boolean up) 

在作用域field内向前滚动一个值,值的计算

System.out.println(cal.getTime()); //Mon Dec 31 16:52:44 SGT 2012
cal.roll(Calendar.DAY_OF_YEAR, true); //在年作用域内向前滚动,由于已经到了这一年的最后一天,滚动后到了这一年的第一天。
System.out.println(cal.getTime()); //Sun Jan 01 16:52:44 SGT 2012

当回退月份时,退1月到12月时,如果是希望得到前一年的12月的话,不能使用cal.roll(Calendar.MONTH,-1),要使用cal.add(Calendar.MONTH,-1)。

5.计算两个日期之间的所有日期列表

 

    /*两个日期之间所有日期
    可以直接显示,也可以返回List*/
	public static void getDates(String daysTmp) {
		// 获取当前日期
		String nowDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		// 所有需要保留的日志日期
		List keepDates = new ArrayList();
		try {
			// 根据今天日期及保留天数,获取最大保留日期
			Calendar cal = Calendar.getInstance();
			// 获取当前日期
			cal.setTime(new Date());
			// 设置保留天数
			//log.error("系统默认保留日期为:"+daysTmp);
			cal.add(Calendar.DATE, -Integer.parseInt(daysTmp));// 天数可正可负:88或者-88
			// 获取最大保留日期
			String oldDate = new SimpleDateFormat("yyyy-MM-dd").format(cal
					.getTime());
			//log.error("当天日期:" + nowDate);
			//log.error("保留最大日期:" + oldDate);
			keepDates.add(oldDate);
			keepDates.add(nowDate);
			Calendar startCalendar = Calendar.getInstance();
			Calendar endCalendar = Calendar.getInstance();
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			java.util.Date startDate = df.parse(oldDate);
			startCalendar.setTime(startDate);
			Date endDate = df.parse(nowDate);
			endCalendar.setTime(endDate);
			while (true) {
				startCalendar.add(Calendar.DAY_OF_MONTH, 1);
				if (startCalendar.getTimeInMillis() < endCalendar
						.getTimeInMillis()) {// TODO 转数组或是集合,楼主看着写吧
					keepDates.add(df.format(startCalendar.getTime()));
					// System.out.println(df.format(startCalendar.getTime()));
				} else {
					break;
				}
			}
		} catch (Exception e) {
			//log.error("计算保留日期时出错,出错原因为NumberFormatException:" + e);
		}
		for(int i = 0;i<keepDates.size();i++){
			System.out.print(keepDates.get(i).toString());
			System.out.println();
		}
		//return keepDates;
	}
    //调用
    public static void main(String[] args) {
		getDates("31");
	}

 忘了从哪里保存的别人的草稿了

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
    public static void main(String[] args) {
        Calendar calendar = new GregorianCalendar(2015, 11, 9, 11, 9, 50);
        Calendar calendar2 = new GregorianCalendar();
        // 设定日期
        calendar2.set(Calendar.YEAR, 2015);
        calendar2.set(Calendar.MONTH, 11);
        calendar2.set(Calendar.DATE, 9);
        calendar2.set(Calendar.HOUR_OF_DAY, 11);
        calendar2.set(calendar.MINUTE, 45);
        calendar2.set(calendar.SECOND, 34);
        // 得到相关的日期元素。
        int year = calendar2.get(Calendar.YEAR);
        int month = calendar2.get(Calendar.MONTH);
        int Date = calendar2.get(Calendar.DATE);
        // 日:Calendar.Date和Calendar.DAY_OF_MONTH同义。
        int hour = calendar2.get(Calendar.HOUR);
        int Minute = calendar2.get(Calendar.MINUTE);
        int ss = calendar2.get(Calendar.SECOND);
        int week = calendar2.get(Calendar.DAY_OF_WEEK);
        // 星期几 这里:1-7.周日是1,周一是2,,,,,周六是7
        System.out.printf("%d年%d月%d日,星期%d\n", year, month, Date, week);
        // 日期计算
        GregorianCalendar calendar3 = new GregorianCalendar(2015, 11, 9, 14, 55, 50);
        ;
        calendar3.add(Calendar.MONTH, -7);// 月份减7
        calendar3.add(Calendar.DATE, 7);// 增加7天
        printCalendar(calendar3);
        // 日历对象和时间对象转化。
        Date d = calendar3.getTime();
        long millSecond = calendar3.getTimeInMillis();
        Date date2 = new Date();
        GregorianCalendar calendar4 = new GregorianCalendar();
        calendar4.setTime(date2);

long g = System.currentTimeMillis();
        printCalendar(calendar4);
    }

public static void printCalendar(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int day2 = calendar.get(Calendar.DATE);
        // 日:Calendar.Date和Calendar.DAY_OF_MONTH
        int date = calendar.get(Calendar.DAY_OF_WEEK) - 1;// 星期几
        String week = "" + ((date == 0) ? "日" : date);
        System.out.printf("%d年%d月%d日,星期%s\n", year, month, day, week);
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值