在Java日常开发中,不可避免的会碰到对时间处理的需求,JDK为我们提供了对应的类来进行处理。Calendar类是一个很好用的工具。Calendar类是一个抽象的类,故不可使用new关键字对其进行实例化操作
该类提供了getInstance()方法来进行实例化的操作。
日常开发中往往会有这样的一个需求:有一个查询,是以月份作为查询条件的,但数据库中保存的数据是单位是天,这时候我们查询某个月份的数据的时候,就需要从这个月的第一天作为起始的日期,最后一天作为终止的日期来进行数据抽取。那么如何获取到形如201902这样月份的第一天和最后一天呢?具体可参看以下代码
package com.janewe.test;
import org.junit.Before;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* @Description: 常用日期类
* @Author: Janewe
* @Date: 2019/2/26 15:27
*/
public class CalendarTest {
Calendar calendar = null;
SimpleDateFormat format = null;
String v_month = "201902";
int year = Integer.valueOf(v_month.substring(0, 4));
int month = Integer.valueOf(v_month.substring(4, 6));
/**
* 被@Before注解标识的方法会在@Test注解标识的方法运行之前运行
*/
@Before
public void test() {
calendar = Calendar.getInstance();
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
/**
* 获取calendar中的基本信息,包括年月日时分秒等
*/
@Test
public void test1() {
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day_of_month = calendar.get(Calendar.DAY_OF_MONTH) + 1; //月份是从0开始的,一月的值是0,二月的值是1,以此类推
int hour = calendar.get(Calendar.HOUR_OF_DAY);//二十四小时制 Calendar.HOUR为十二小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "年" + month + "月" + day_of_month + "日" + hour + "时" + minute + "分" + second + "秒");
String date = format.format(calendar.getTime());
System.out.println(date);
}
/**
* 获取某个月份的第一天
*/
@Test
public void test2() {
calendar.set(year, month - 1, 1);
String firstDayOfMonth = format.format(calendar.getTime());
System.out.println(firstDayOfMonth);
}
/**
* 获取某个日期的最后一天
*/
@Test
public void test3() {
calendar.set(year, month, 1);//这里先设置要获取月份的下月的第一天
calendar.add(Calendar.DATE, -1);//这里将日期值减去一天,从而获取到要求的月份最后一天
String lastDayOfMonth = format.format(calendar.getTime());
System.out.println(lastDayOfMonth);
}
}
对于Calendar类我们可以灵活运用,以达到我们的需求。以上不足之处望批评指正。