获取当前时间的月初/月末,当前周的周一/周日
程序员文章站
2022-05-15 10:58:49
...
获取当前时间周的开始,结束时间
即:若当前时间为2021-06-29(周二)这周的开始应为2021-06-28(周一) 结束为2021-07-04(周日)
方法一:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
//获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (dayWeek == 1) {
dayWeek = 8;
}
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MILLISECOND, 0);
Date mondayDate = cal.getTime();
String weekBegin = sdf.format(mondayDate);
System.out.println("所在周星期一的日期:" + weekBegin);
cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
Date sundayDate = cal.getTime();
String weekEnd = sdf.format(sundayDate);
System.out.println("所在周星期日的日期:" + weekEnd);
结果:
所在周星期一的日期:2021-06-28 00:00:00
所在周星期日的日期:2021-07-04 00:00:00
方法二:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cld = Calendar.getInstance(Locale.CHINA);
cld.setFirstDayOfWeek(Calendar.MONDAY);//以周一为首日
cld.setTimeInMillis(System.currentTimeMillis());//当前时间
cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//周一
System.out.println(df.format(cld.getTime()));
cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//周日
System.out.println(df.format(cld.getTime()));
结果:
周一:2021-06-28 15:52:38
周日:2021-07-04 15:52:38
方法三:
// 获得本周一与当前日期相差的天数
public static int getMondayPlus() {
Calendar cd = Calendar.getInstance();
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
//由于Calendar提供的都是以星期日作为周一的开始时间
if (dayOfWeek == 1) {
return -6;
} else {
return 2 - dayOfWeek;
}
}
// 获得当前周- 周一的日期
public static Long getCurrentMonday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
return monday.getTime();
}
// 获得当前周- 周日 的日期
public static Long getPreviousSunday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus +6);
Date monday = currentDate.getTime();
return monday.getTime();
结果:
周一:2021-06-28 15:52:38
周日:2021-07-04 15:52:38
获取当月的月初,月底
即:若现在日期为2021-06-28 15:52:38,
则它的月初这个月的1号为:2021-06-01 00:00:00,
月末为这个月的28/30/31号为:2021-06-30 23:59:59
月初:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
//设置为1号,当前日期既为本月第一天
/* c.set(Calendar.DAY_OF_MONTH, 1);*/
//将小时至0
c.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
c.set(Calendar.MINUTE, 0);
//将秒至0
c.set(Calendar.SECOND, 0);
//将毫秒至0
c.set(Calendar.MILLISECOND, 0);
String first = sdf.format(c.getTime());
System.out.println("当月初为:" + first);
结果:
当月初为:2021-06-01 00:00:00
月末:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar ca = Calendar.getInstance();
ca.set(Calendar.DAY_OF_MONTH,
ca.getActualMaximum(Calendar.DAY_OF_MONTH));
//将小时至23
ca.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至59
ca.set(Calendar.MINUTE, 59);
//将秒至59
ca.set(Calendar.SECOND, 59);
//将毫秒至999
ca.set(Calendar.MILLISECOND, 999);
String last = df.format(ca.getTime());
System.out.println("当月月底为:"+last);
结果:
当月初为:2021-06-30 23:59:59
上一篇: 单例模式讲解
下一篇: lucene-索引的优化和索引过程查看