Java日期处理(一)

  • Post author:
  • Post category:java


获取指定格式的日期,获取某一范围内的日期



一、确定返回类型

先确定需要的日期是什么类型,直接展示数据可以是String类型,如果需要对属性赋值name可以返回Date类型。



二、确定日期格式

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 ……

等等,还有其它的格式



三、结合返回类型和日期格式

sdf.format(date);//使用format是将Date类型转String类型,date为Date类型,返回的是String类型
sdf.parse(date);//使用parse是将String类型转Date类型,date为String类型,返回的是Date类型



四、操作



1.获取某个日期的前一天、后一天等

比如说获取明天的日期:

public static String getTomorrow(Date date) {//date传的参数为new Date()
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	calendar.add(Calendar.DAY_OF_MONTH, +1);//通过修改add参数的不同值来达到效果
	return sdf.format(calendar.getTime());
}

如上,输出的是”2023-02-10″。如果说要获取的是昨天,可以进行如下修改:

public static String getLastDay(Date date) {//date传的参数为new Date()
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	calendar.add(Calendar.DAY_OF_MONTH, -1);//修改的add方法的第二个参数
	return sdf.format(calendar.getTime());//返回值为"2023-02-08"
}



2.通用方法

如果为Calendar的每一个值都写一个方法,会很多,此时可以进行如下修改:

public static String getAppointedDay(int type,int size,Date date) {//date传的参数为new Date()
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	calendar.add(type, size);//
	return sdf.format(calendar.getTime());
}

此时给type和size传不同的值,可以达到不同的效果,例如:

@Test
public void test()
{
    System.out.println(DateUtils.getAppointedDay(1,1,new Date()));//下一年,2024-02-09
    System.out.println(DateUtils.getAppointedDay(2,-1,new Date()));//下个月,2023-01-09
    System.out.println(DateUtils.getAppointedDay(4,1,new Date()));//下周,2023-02-16
    System.out.println(DateUtils.getAppointedDay(1,-1,new Date()));//上一年,2022-02-09
    System.out.println(DateUtils.getAppointedDay(2,-1,new Date()));//上个月2023-01-09
    System.out.println(DateUtils.getAppointedDay(4,-1,new Date()));//上周,2023-02-02
}

至于传入的getAppointedDay()方法的type的取值范围,需要对照Calendar类。

例如该类中定义”public final static int YEAR = 1″,那么type传1就表示我们获取的是关于年份变化的日期。

如果获取返回类型,需要是Date类型,可以增加如下方法:

public static Date getAppointedDate(int type,int size,Date date) {//date传的参数为new Date()
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(type, size);//
    return calendar.getTime();
}
@Test
public void test()
{
    System.out.println(DateUtils.getAppointedDate(1,1,new Date()));//下一年,Fri Feb 09 12:58:54 CST 2024
    System.out.println(DateUtils.getAppointedDate(2,-1,new Date()));//下个月,Mon Jan 09 12:58:54 CST 2023
    System.out.println(DateUtils.getAppointedDate(4,1,new Date()));//下周,Thu Feb 16 12:58:54 CST 2023
    System.out.println(DateUtils.getAppointedDate(1,-1,new Date()));//上一年,Wed Feb 09 12:58:54 CST 2022
    System.out.println(DateUtils.getAppointedDate(2,-1,new Date()));//上个月,Mon Jan 09 12:58:54 CST 2023
    System.out.println(DateUtils.getAppointedDate(4,-1,new Date()));//上周,Thu Feb 02 12:58:54 CST 2023
}



3.获取某个日期的年、月、日

public static int getApprointedIns(int type,Date date) {
	GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();//GregorianCalendar继承Calendar
	gc.setTime(date);
	return gc.get(type);
}

测试用例:

@Test
public void test()
{
    System.out.println(DateUtils.getApprointedIns(1,new Date()));//获取年,2023
    System.out.println(DateUtils.getApprointedIns(2,new Date()));//获取月,1
    System.out.println(DateUtils.getApprointedIns(7,new Date()));//获取周几,5
    System.out.println(DateUtils.getApprointedIns(5,new Date()));//获取日,9
}


其中月份和星期是不对的,因为月份的初始值是0,因此正确的月份需要加1,一周从周日算起,因此它需要减1。

@Test
public void test()
{
    System.out.println(DateUtils.getApprointedIns(2,new Date())+1);//获取月,2
    System.out.println(DateUtils.getApprointedIns(7,new Date())-1);//获取周几,4
}



4.获取某个日期所在月的开始、结束时间

//获取本月的开始时间
public static Date getBeginDayOfMonth(Date date) {
	Calendar calendar = Calendar.getInstance();
	calendar.set(getApprointedIns(1,date), getApprointedIns(2,date), 1);//获取年、月,开始是1号
	return getDayStartTime(calendar.getTime());
}
//获取本月的结束时间
public static Date getEndDayOfMonth(Date date) {
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(date);
	int day = calendar.getActualMaximum(5);
	calendar.set(getApprointedIns(1,date), getApprointedIns(2,date), day);
	return getDayEndTime(calendar.getTime());
}

测试用例:

@Test
public void test()
{
    System.out.println(DateUtils.getBeginDayOfMonth(new Date()));//获取本月开始  2023-02-01 00:00:00.0
    System.out.println(DateUtils.getEndDayOfMonth(new Date()));//获取本月结束  2023-02-28 23:59:59.999
}



版权声明:本文为qy8189原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。