作者:仙魁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 星期五,结果如下

java 今年 本周 获取今日 java获取本周一的日期_星期

2、获取指定任意日期当周的一星期的所有日期,指定 2019-10-15 星期二,结果如下

java 今年 本周 获取今日 java获取本周一的日期_时间_02

五、关键代码

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;
	}
}