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

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. AcWing 144. 最长异或值路径 01字典树打卡

    给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...

  2. Ubuntu下设置静态网址

    百度上找的图形界面下设置方式: 因为我这里的ubuntu版本是14.10版本 所以我先点击[系统设置],它位置在桌面左侧的菜单栏后面位置. 在系统设置页面,找到[硬件]选项里面的[网络]一项 然后再使 ...

  3. Ubuntu管理员密码设置

    最近学习嵌入式编程,首先准备搭建一个嵌入式开发环境. 由于想省钱,就准备搭建一个虚拟的arm系统用于测试学习. 虚拟系统搭建与linux系统上,暂定使用Ubuntu+qemu进行环境搭建. 在进行Ub ...

  4. 12、jquery的tree组件

    1. <!--jquery 的主文件...--> <script type="text/javascript" src="../../js/jquery ...

  5. Dynamic partition strict mode requires at least one static partition column.

    https://blog.csdn.net/huobumingbai1234/article/details/81099856

  6. artTemplate性能卓越的 js 模板引擎

    artTemplate-3.0 新一代 javascript 模板引擎 目录 特性 快速上手 模板语法 下载 方法 NodeJS 使用预编译 更新日志 授权协议 特性 性能卓越,执行速度通常是 Mus ...

  7. vue-lic工具搭建vue-webpack项目

    1.安装node环境(安装node时候会自动安装npm) 参考官网:https://nodejs.org/en/download/ 2.安装vue的脚手架工具vue-cli // 全局安装 npm i ...

  8. 【node】---token的原理及使用---【alley】

    一.登陆的验证流程 当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 C ...

  9. smf和mmf分别是什么?

    单模光纤/缩写SMF(single mode fiber) 多模光纤/缩写MMF(multi mode (optical) fibre)

  10. Java传输对象模式

    当我们想要在客户端到服务器的一个传递具有多个属性的数据时,可使用传输对象模式.传输对象也称为值对象.传输对象是一个具有getter/setter方法的简单POJO类,并且是可序列化的,因此可以通过网络 ...