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

package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值