作者:仙魁XAN
Java 基础 之 获取当前一周的所有日期/获取指定任意日期当周一星期的所有日期
目录
Java 基础 之 获取当前一周的日期/获取指定任意日期当周一星期的日期
一、简单介绍
二、实现原理
三、注意事项
四、效果实现
五、关键代码
一、简单介绍
Java 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。
本节介绍,Java 开发 中 获取当前一周一星期的日期,进而实现获取任意指定日期当周一星期的日期方法
二、实现原理
1、获取当天的毫秒时间 System.currentTimeMillis() ,得到当天星期几 new SimpleDateFormat("E") ,format(toDayDate) ;
2、然后计算与周一间隔几天,进而,得到周一的毫秒时间,最后 for 循环,依次加一天的毫秒时间,进而得到 7 天的毫秒时间;
// 获取这周第一天毫秒值
long dayMillis = 24*60*60*1000;
// 获取这周第一天的日子
long firstOfWeekMillis = timeMills - dayFromMonday * dayMillis;
// 使用 for 循环得到当前一周的日子(7天的日子)
for(long i = firstOfWeekMillis;i<firstOfWeekMillis+ 7 *dayMillis;i+=dayMillis)
3、把 for 循环中把 7 天的毫秒时间,在对应转换为日期即可;
Date targetDate = new Date(i);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String targetDay = format.format(targetDate);
4、同理,把指定的任意日期转为时间毫秒数,然后重复 1 — 3 步骤,从而得到指定日期的当周所有日期;
// 指定天的毫秒时间
long currentTimeMillis = getWhatDaySomeDateMillis("2019-10-15");
三、注意事项
1、时间日期相关可能有更好方法吧,这里时间和日期转换方法仅供参考
2、指定的任意日期的格式为 "yyyy-MM-dd" ;
四、效果实现
1、获取当前一周的所有日期,今天是 2021-11-19 星期五,结果如下
2、获取指定任意日期当周的一星期的所有日期,指定 2019-10-15 星期二,结果如下
五、关键代码
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TestGetWeekDate {
public static void main(String[] args) {
GetCurrentWeekAllDate();
GetSomedayWeekAllDate();
}
// 获取当前一周的一星期的日期
private static void GetCurrentWeekAllDate(){
// 获取当天的毫秒时间
long currentTimeMillis = System.currentTimeMillis();
List<String> list = getAllWeekDayDateByMillis(currentTimeMillis);
for(String date:list) {
System.out.println("date : "+date);
}
}
// 获取指定任意日期当周的一星期的日期
private static void GetSomedayWeekAllDate(){
// 指定天的毫秒时间
long currentTimeMillis = getWhatDaySomeDateMillis("2019-10-15");
List<String> list = getAllWeekDayDateByMillis(currentTimeMillis);
for(String date:list) {
System.out.println("date : "+date);
}
}
// someDataStr 格式:"yyyy-MM-dd"
// 返回 时间毫秒
private static long getWhatDaySomeDateMillis(String someDataStr) {
Date date= new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
date = format.parse(someDataStr);
return date.getTime();
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
// 获取指定日期毫秒时间得到 星期几
private static String getWhatDaySomeday(long timeMillis) {
Date toDayDate = new Date(timeMillis);
SimpleDateFormat formatE = new SimpleDateFormat("E");
String week =null;
try {
week = formatE.format(toDayDate);
System.out.println(week);
} catch (Exception e) {
e.printStackTrace();
}
return week;
}
// 根据 星期几到获取与 星期一 相差几天
private static int getHowManyDayFromMonday(String someDay) {
int day = 0;
switch(someDay) {
case "星期一":
day=0;
break;
case "星期二":
day=1;
break;
case "星期三":
day=2;
break;
case "星期四":
day=3;
break;
case "星期五":
day=4;
break;
case "星期六":
day=5;
break;
case "星期日":
day=6;
break;
default:
System.out.println("不存在这样的星期几 : "+ someDay);
break;
}
return day;
}
// 获取指定日期毫秒时间的当周一星期的日期
private static List<String> getAllWeekDayDateByMillis(long timeMills){
List<String> list = new ArrayList<String>();
// 得到指定时间是周几
String week = getWhatDaySomeday(timeMills);
System.out.println("日期是:" + week);
// 记录与周一的间隔天数
int dayFromMonday=getHowManyDayFromMonday(week);
System.out.println("dayFromMonday : "+ dayFromMonday);
// 获取这周第一天毫秒值
long dayMillis = 24*60*60*1000;
// 获取这周第一天的日子
long firstOfWeekMillis = timeMills - dayFromMonday * dayMillis;
// 使用 for 循环得到当前一周的日子(7天的日子)
for(long i = firstOfWeekMillis;i<firstOfWeekMillis+ 7 *dayMillis;i+=dayMillis) {
Date targetDate = new Date(i);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String targetDay = format.format(targetDate);
list.add(targetDay);
}
return list;
}
}