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 版权协议,转载请附上原文出处链接和本声明。