本人親測,有用,適用性比較強,直接上代碼說話。
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()));
}
}
