日期处理在编程过程中必不可少,特别是针对记录的区间查询必定要根据当前日期或指定日期进行前后推移的计算。本文带大家了解一下常见的使用场景及代码。

基于Date和Calendar获得前后月份

首先,我们经常当前月份前一个月,或前几个月的数据,此时我们可以通过如下代码来进行实现。

private static void moveMonth(){
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
	try {
		String currentMonth = "2020-04";
		Date currentDate = sdf.parse(currentMonth);

		Calendar calendar = Calendar.getInstance();
		calendar.setTime(currentDate);
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
			System.out.println(sdf.format(calendar.getTime()));
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

在上述代码中,首先通过SimpleDateFormat来讲字符串转化为日期,当然如果是当前日期,直接new Date对象即可。

然后,通过Calendar.getInstance()方法获得Calendar实例化对象,将上面获得的Date日期通过setTime方法设置到对象中,然后调用set方法,用来设置我们要修改的日期项,这里第一个参数的值的定义位于Calendar中,通过18个常量来进行定义。我们这里要修改月份,因此使用Calendar.MONTH。

第二个参数是对应月份我们要修改的值,这先通过calendar的get方法获得初始的月份,然后通过-1来获得前一个月的月份。当然也可+1获得未来一个月的月份。通过这样对月份至的增减来达到获取过去或未来的一个月或几个月的Date。

比如上述代码执行之后,打印出:2020-03。也就是前一个月的日期。

获取当前日期的前一天或后一天

上面获取了月份的增减值,获取日期的方式依次类推,参考上述思路即可进行调整。下面展示一下具体的代码:

private static void moveDay(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			String currentMonth = "2020-04-02";
			Date currentDate = sdf.parse(currentMonth);

			Calendar calendar = Calendar.getInstance();
			calendar.setTime(currentDate);
			calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
			System.out.println(sdf.format(calendar.getTime()));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

上述代码打印出:2020-04-03。成功获得指定日期的后天。

小结

关于获取日期或月或周的前后时间单位我们经常会遇到,也经常需要搜索解决,但如果你理解了上述基于Calendar和Date的实现思路,遇到类似的问题就再也不用借助搜索引擎,而是可以徒手写代码了。



Java根据当前日期获得前后日期插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2020/04/22/java-calendar-date/