(乾貨)java中如何根據一個時間獲取屬於本年那一週,本週的開始時間以及最後一天時間。而且設置起始時間爲周6.結束時間爲周5

本人親測,有用,適用性比較強,直接上代碼說話。java

package com.helloBike.data;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;

public class Data {

	public static void main(String[] args) throws ParseException {
//		LocalDate localDate = LocalDate.parse("2017-10-07");
//		LocalDate nextSunday = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
//		System.out.println(localDate);
//		System.out.println(nextSunday);
		
//		a(20171004);
//		System.out.println("****************************************");
		getFirstDay("2017-10-17");
		System.out.println("****************************************");
		getLastDay1("2017-10-17");
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
		String a="2017-10-17";// new Date()爲獲取當前系統時間
		Date b =df.parse(a);
		System.out.println("Date a="+b);
		if(true==identyWeek(b)){
			System.out.println("1");
		}else{
			System.out.println("0");
		}
//		stampToDate("20171004");
//		LocalDate c = LocalDate.now();
//		System.out.println("LocalDate="+c);
//		localToDate(c);
//		System.out.println("localToDate(c)="+localToDate(c));
//		System.out.println("****************************************");

	}
	
        /**
	 * 獲取當前時間並和傳入的時間判斷,當傳入時間的最後一天小於這一天的最後一天的時候表示這周沒過完就不執行語句
	 * @param data
	 * @return
	 * @throws ParseException
	 */
	public static boolean identyWeek(Date data) throws ParseException{
		//獲取傳入時間的最後一天
		SimpleDateFormat date1 = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("identyWeekdate1="+date1);
		
		String date2 = date1.format(data);
		System.out.println("identyWeek date2="+date2);
		
		System.out.println("getLastDay date2");
		String lastTime = getLastDay1(date2);
		
		System.out.println("identyWeek lastTime="+lastTime);
		//獲取當前時間
		Date date= new Date();//建立一個時間對象,獲取到當前的時間
		System.out.println("當前時間date"+date);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//設置時間顯示格式
		String str = sdf.format(date);//將當前時間格式化爲須要的類型
		System.out.println("identyWeek str="+str);
		
		System.out.println("getLastDay1 ");
		String nowLastTime = getLastDay1(str);
		System.out.println("nowLastTime="+nowLastTime);
		//噹噹前時間最後一天和開始時間最後一天
		int res=lastTime.compareTo(nowLastTime);
        if(res<0)
            return true;
        else
		  return false;
	}
	
        /**
	 * 傳入字符串類型日期,返回該日期的本週最後天(這裏設置的是周5爲最後一天)
	 * getLastDay
	 * @param x
	 * @throws ParseException
	 */
	public static String  getLastDay1(String x) throws ParseException{
		
		 Date InputDate = new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(x));
		 //建立一個日曆對象cDate
		 Calendar cDate = Calendar.getInstance();
		 //調用日曆對象的方法獲得本週第一天的值
		 cDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //將時間傳給日曆對象
		 cDate.setTime(InputDate);
		 //建立一個日曆對象firstDate
		 Calendar lastDate = Calendar.getInstance();
		 //設置一週第一天日期參數  ,這裏設置爲monday 星期一 ,週一到週日
		 lastDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //設置日曆時間,當前時間爲輸入的時間
		 lastDate.setTime(InputDate);
		 //設置得到的年份相對於第一年的,。沒什麼用
		 if(cDate.get(Calendar.WEEK_OF_YEAR)==1&&cDate.get(Calendar.MONTH)==11){
			 lastDate.set(Calendar.YEAR, cDate.get(Calendar.YEAR)+1);
		 }
		 //獲得這一點相對於一週來講是星期幾,星期2的返回值是3
		 int week  = cDate.get(Calendar.DAY_OF_WEEK)-1;
		 System.out.println("week="+week);
		 //判斷這周是否爲周6週日,是的話就算出下一週的起始時間,而後推算出週六的時間,
		 if(week==0|| week==6){ 
			 System.out.println("在週日或週六的時候");
			 System.out.println("x="+x);
			 //獲得本年的週數
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR)+1;
			 //設置本年的週數
			 lastDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 lastDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY+6);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String lastTime = new SimpleDateFormat("yyyy-MM-dd").format(lastDate.getTime());		 
			 return lastTime;
		 }else {
			 //if(week==1||week==2||week==3||week==4||week==5)
			 
			 System.out.println("再也不周六或週日");
			 System.out.println("x="+x);
			 //當本週不爲週六和週日的時候
			 System.out.println("擋在週一或週六的時候");
			 //獲得本年的週數-1
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR);
			 System.out.println("所在第幾周:"+typeNum);
			 //設置本年的週數
			 lastDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 lastDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY+6);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String lastTime = new SimpleDateFormat("yyyy-MM-dd").format(lastDate.getTime());
			 return lastTime;
			
		 }
		}
	/**
            *得到系統當天的時間,將localdate格式轉換成date格式的日期
            *
            */
	public static Date localToDate(LocalDate a) throws ParseException{
		  //設置轉換格式.時間偏移id
		  ZoneId zone = ZoneId.systemDefault();
		  //使用ZonedDateTime將LocalDate轉換爲Instant。
		  Instant instant = a.atStartOfDay().atZone(zone).toInstant();
		  //使用from()方法從Instant對象獲取Date的實例
		  java.util.Date date = Date.from(instant);
		  //將data按照必定的格式來分辨.
		 String b = new SimpleDateFormat("yyyy-MM-dd").format(date.getTime());
		 System.out.println("b="+b);
		 Date c =new SimpleDateFormat("yyyy-MM-dd").parse(b);
		 System.out.println("c="+c);
		 return c;
	}
	
	
	public static String stampToDate(String s){
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        System.out.println("res="+res);
        return res;
	}
	
	
	
	/**
	 * 傳入一個string類型的參數返回該周的最後一天(這裏設置最後一天爲周5)
	 * get last day
	 */
	public static void  getLastDay(String x) throws ParseException{
		 Date InputDate = new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(x));
		 //建立一個日曆對象cDate
		 Calendar cDate = Calendar.getInstance();
		 //調用日曆對象的方法獲得本週第一天的值
		 cDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //將時間傳給日曆對象
		 cDate.setTime(InputDate);
		 //建立一個日曆對象firstDate
		 Calendar lastDate = Calendar.getInstance();
		 //設置一週第一天日期參數  ,這裏設置爲monday 星期一 ,週一到週日
		 lastDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //設置日曆時間,當前時間爲輸入的時間
		 lastDate.setTime(InputDate);
		 //設置得到的年份相對於第一年的,。沒什麼用
		 if(cDate.get(Calendar.WEEK_OF_YEAR)==1&&cDate.get(Calendar.MONTH)==11){
			 lastDate.set(Calendar.YEAR, cDate.get(Calendar.YEAR)+1);
		 }
		 //獲得這一點相對於一週來講是星期幾,星期2的返回值是3
		 int week  = cDate.get(Calendar.DAY_OF_WEEK);
		 System.out.println("week="+week);
		 //判斷這周是否爲周6週日,是的話就算出下一週的起始時間,而後推算出週六的時間,
		 if(week==0|| week==6){ 
			 System.out.println("在週一或週六的時候");
			 System.out.println("x="+x);
			 //獲得本年的週數
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR)+1;
			 //設置本年的週數
			 lastDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 lastDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY+6);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String firstTime = new SimpleDateFormat("yyyy-MM-dd").format(lastDate.getTime());
			 
			 System.out.println("firstTime:"+firstTime);
		 }else{
			 System.out.println("再也不周六或週日");
			 System.out.println("x="+x);
			 //當本週不爲週六和週日的時候
			 System.out.println("擋在週一或週六的時候");
			 //獲得本年的週數-1
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR);
			 System.out.println("所在第幾周:"+typeNum);
			 //設置本年的週數
			 lastDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 lastDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY+6);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String lastTime = new SimpleDateFormat("yyyy-MM-dd").format(lastDate.getTime());
			 System.out.println("firstTime:"+lastTime);
		 }
		}
	
	/**
	 * 
	 * 傳入一個時間參數,返回該日期的週六
	 * @param x
	 * @throws ParseException
	 */
	public static void  getFirstDay(String x) throws ParseException{
		 Date InputDate = new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(x));
		 //建立一個日曆對象cDate
		 Calendar cDate = Calendar.getInstance();
		 //調用日曆對象的方法獲得本週第一天的值
		 cDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //將時間傳給日曆對象
		 cDate.setTime(InputDate);
		 //建立一個日曆對象firstDate
		 Calendar firstDate = Calendar.getInstance();
		 //設置一週第一天日期參數  ,這裏設置爲monday 星期一 ,週一到週日
		 firstDate.setFirstDayOfWeek(Calendar.MONDAY);
		 //設置日曆時間,當前時間爲輸入的時間
		 firstDate.setTime(InputDate);
		 //設置得到的年份相對於第一年的,。沒什麼用
		 if(cDate.get(Calendar.WEEK_OF_YEAR)==1&&cDate.get(Calendar.MONTH)==11){
			 firstDate.set(Calendar.YEAR, cDate.get(Calendar.YEAR)+1);
		 }
		 //獲得這一點相對於一週來講是星期幾,星期2的返回值是3
		 int week  = cDate.get(Calendar.DAY_OF_WEEK)-1;
		 System.out.println("week="+week);
		 //判斷這周是否爲周6週日,是的話就算出下一週的起始時間,而後推算出週六的時間,
		 if(week==0|| week==6){ 
			 System.out.println("擋在週一或週六的時候");
			 System.out.println("x="+x);
			 //獲得本年的週數
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR);
			 //設置本年的週數
			 firstDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 firstDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String firstTime = new SimpleDateFormat("yyyy-MM-dd").format(firstDate.getTime());
			 
			 System.out.println("firstTime:"+firstTime);
		 }else{
			 System.out.println("再也不周六或週日");
			 System.out.println("x="+x);
			 //當本週不爲週六和週日的時候
			 System.out.println("擋在週一或週六的時候");
			 //獲得本年的週數-1
			 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR)-1;
			 System.out.println("所在第幾周:"+typeNum);
			 //設置本年的週數
			 firstDate.set(Calendar.WEEK_OF_YEAR, typeNum);
			 //設置本週的天數,本週定位爲SATURDAY
			 firstDate.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
			 //設置將本週週日設置爲第一天
			 //firstDate.setFirstDayOfWeek(Calendar.FRIDAY);
			 //所在周的起始日期
			 String firstTime = new SimpleDateFormat("yyyy-MM-dd").format(firstDate.getTime());
			 System.out.println("firstTime:"+firstTime);
		 }
		}

	
	/**
	*傳入一個int類型的時間參數,返回該天屬於第幾周,星期幾,本週開始時間,本週結束時間(週一爲開始時間,週日爲結束時間)
       **/
	public static void  a(int x) throws ParseException{
	//新建一個日期類型,
	Date InputDate = new SimpleDateFormat("yyyyMMdd").parse(String.valueOf(x));
	//建立一個日曆對象cDate
	 Calendar cDate = Calendar.getInstance();
	 //調用日曆對象的方法獲得本週第一天的值
	 cDate.setFirstDayOfWeek(Calendar.MONDAY);
	 //將時間傳給日曆對象
	 cDate.setTime(InputDate);
	//建立一個日曆對象firstDate
	 Calendar firstDate = Calendar.getInstance();
	 firstDate.setFirstDayOfWeek(Calendar.MONDAY);
	 firstDate.setTime(InputDate);
	 
	 
	 Calendar lastDate = Calendar.getInstance();
	 lastDate.setFirstDayOfWeek(Calendar.MONDAY);
	 lastDate.setTime(InputDate);
	 
	 if(cDate.get(Calendar.WEEK_OF_YEAR)==1&&cDate.get(Calendar.MONTH)==11){
		 System.out.println("cDate="+cDate);
		 firstDate.set(Calendar.YEAR, cDate.get(Calendar.YEAR)+1);
		 lastDate.set(Calendar.YEAR, cDate.get(Calendar.YEAR)+1);
	 }
	 System.out.println("x="+x);
	 int week  = cDate.get(Calendar.DAY_OF_WEEK);
	 System.out.println(week);
//	 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR)-1; //返回第40周
	 int typeNum  = cDate.get(Calendar.WEEK_OF_YEAR);//返回41周
	 System.out.println("所在第幾周"+typeNum);
	 
	 firstDate.set(Calendar.WEEK_OF_YEAR, typeNum);
	 firstDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
	 //所在周開始日期
	 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
	 System.out.println("sdf="+sdf);
	// firstDate.getTime().add(Calendar.DAY_OF_WEEK, -1);
	 sdf.format(firstDate.getTime());
	 
	 System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(firstDate.getTime()));
	 
	 lastDate.set(Calendar.WEEK_OF_YEAR, typeNum);
	 lastDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
	 //所在周結束日期
	 System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(lastDate.getTime()));
	}
}        
 
相關文章
相關標籤/搜索