引言
项目接触了日期操作,所以特地学习了下。
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