Calendar 工具类浅析

引言

项目接触了日期操作,所以特地学习了下。

Calendar 就是 java.util 中用于处理日期的工具类。需要注意的是 Calendar 是抽象类

 

getInstance()

我们通过 Calendar.getInstance() 方法,通过你所在的时区、日历格式,以及当前时间,确定这一时刻的Calendar 对象。

 

我们先来通过一段代码来讲述一些 Calendar 经常用到的方法和注意事项:

案例一:

public static Date getDate(int day) {
		Calendar cal = Calendar.getInstance();

                cal.setTime(new Date() );
		cal.add(Calendar.DATE, day);
		cal.add(Calendar.HOUR_OF_DAY, 2);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}
	
public static void main(String[] args) {
		System.out.println(getDate(0));
	}

结果:(获取当前时间 + 2 个小时)

 

setTime(Date date)

给指定的 日历对象 赋值。

 

add(int field, int amount)

对给定的日历 根据日历的规则 添加或减去 指定的时间量 。

field 有很多种:

 

Calendar.DATE  

等同于 Calendar.DAY_OF_MONTH  , 表示一个月中的某天,一个月的第一天值为 1

 

Calendar.DAY_OF_MONTH 、 Calendar.DAY_OF_YEAR 和 Calendar.DAY_OF_WEEK

在 cal.add() 方法里面这三个参数并没有明显的区别,即便 amount 超出了 对应的 field(比如 DAY_OF_MONTH) 的范围,日历系统也会正确处理。

但如下

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);   //返回这周的周六
cal.set(Calendar.DAY_OF_MONTH , 1); //返回本月的第一天

而且从可读性考虑,还是用适当的参数比较好。

 

Calendar.HOUR_OF_DAY 和 Calendar.HOUR

Calendar.HOUR_OF_DAY:(24小时制)比如:10:04:15.250 PM 表示 22.

Calendar.HOUR:(12小时制)比如:10:04:15.250 PM 表示 10.

跟 DAY 一样,只是代码的可读性,超出范围,值是一样的。

案例二:

cal.add(Calendar.HOUR, 13);

cal.add(Calendar.HOUR_OF_DAY, 13);

 

set(int field, int value)

给指定的 日历字段 赋值。超出区域不会报错。

 

 

 

Date 和 String 转换

SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。

推荐俩个互换的方法:

public static Date convertStringToDate(String strDate, String pattern) {
		if (StringUtil.isNull(strDate))
			return null;
		if (StringUtil.isNull(pattern))
			pattern = "yyyy-MM-dd HH:mm";  //模式:yyyy-MM-dd HH:mm
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try {
			return df.parse(strDate);
		} catch (ParseException e) {
			throw new KmssRuntimeException(e);
		}
	}

 

public static String convertDateToString(Date aDate, String pattern) {
		if (aDate == null)
			return null;
		if (StringUtil.isNull(pattern))
			pattern = "yyyy-MM-dd"; //模式:yyyy-MM-dd
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		return df.format(aDate);
	}

 

参考:(优质文章)

 

https://segmentfault.com/q/1010000004275325

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值