本人亲测,有用,适用性比较强,直接上代码说话。

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

(干货)java中如何根据一个时间获取属于本年那一周,本周的开始时间以及最后一天时间。并且设置起始时间为周6.结束时间为周5的更多相关文章

  1. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  2. Java中直接输出一个类的对象

    例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...

  3. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  4. Java中如何查看一个类依赖的包

    Java中如何查看一个类依赖的包 如图, 我如何知道JSONArray是依赖的哪一个包呢,这里有两个json-lib包?   测试语句:   public static void main(Strin ...

  5. 干货 | Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  6. java中DelayQueue的一个使用陷阱分析

    最近工作中有接触到DelayQueue,网上搜索资料的时候发现一篇文章谈到DelayQueue的坑.点击打开链接 文中已经总结了遇到坑的地方,还有解决方案.不过我第一眼看一下没弄明白为什么,所以翻了翻 ...

  7. 七、如何在Java中高效检查一个数组是否含有一个值

    如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非 ...

  8. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  9. java中只能有一个实例的类的创建

    Java中,如果我们创建一个类,想让这个类只有一个对象,那么我们可以 1:把该类的构造方法设计为private 2:在该类中定义一个static方法,在该方法中创建对象 package test; / ...

随机推荐

  1. Robot Framework:接口测试

    ---恢复内容开始--- robotframework进行接口测试,需要安装Request和RequestLibrary包 pip install requests pip install -U ro ...

  2. Yii2 使用十一 在设置enablePrettyUrl时候,defaultAction的设置方法

    启用美化Url的功能 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableS ...

  3. android ellipsize的使用及实现跑马灯效果总结

    参考资料: http://blog.csdn.net/huiwolf2008/article/details/7901084 http://www.cnblogs.com/Gaojiecai/arch ...

  4. 4.2.1 Vector bit-select and part-select addressing

    Frm:IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language Bit-selects extract a ...

  5. Linux启动过程的C语言代码分析

    1. main函数 参见上方http://www.cnblogs.com/long123king/p/3543872.html,代码跳转到main函数. arch/x86/boot/main.c 1: ...

  6. Nginx学习——简介及常用命令

    Nginx简介 Nginx是什么 同Apache一样,都是一种WEB服务器 基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议提供各种网络服务 ...

  7. java-day02

    数据类型自动转换 要求:数据范围从小到大 数据类型强制类型转换 格式:范围小的数据类型 范围小的变量名 = (范围小的数据类型)原范围大的数据 注意事项: 1.可以会造成数据溢出或者是精度损失. 2. ...

  8. DFS问题举例:N个整数选k个使其和为x

    N个整数选k个使其和为x,若有多个方案,选择元素平方和最大的一个 #include<cstdio> #include<cmath> #include<cstring> ...

  9. (数据科学学习手札57)用ggplotly()美化ggplot2图像

    一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非 ...

  10. 实现简单的PHP接口,以及使用js/jquery ajax技术调用此接口

    主要介绍下如何编写简单的php接口,以及使用js/jquery的ajax技术调用此接口. Php接口文件(check.php): <?php $jsonp_supporter = $_GET[‘ ...