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

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. python3 投票

    import urllib.request # cd C:\Python36-32\Scripts # pip install BeautifulSoup from bs4 import Beauti ...

  2. VC 串口通讯基本原理,讲的很是详细

    目 录打开串口............................................................................................. ...

  3. luoguP1290 欧几里德的游戏 [博弈论]

    题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...

  4. jQuery Validate (摘自官网)

    jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证 ...

  5. LInux多线程编程----线程属性pthread_attr_t

    1.每个POSIX线程有一个相连的属性对象来表示属性.线程属性对象的类型是pthread_attr_t,pthread_attr_t 在文件/usr/include/bits/pthreadtypes ...

  6. Robotframework之下拉列表select

    下拉框控件很常见啊,主要说一下robotframework中怎么玩转下拉框,第一点要注意的就是,别看到下拉的就用select控件去操作,因为很多下拉列表用的不一定就是select控件.robotfra ...

  7. Codeforces 1189A Keanu Reeves

    题目链接:http://codeforces.com/problemset/problem/1189/A 思路:统计1 和 0 的个数,不相等拆开字符串,否则不拆. AC代码: #include< ...

  8. Gerrit(0): Install and Config

    Install(Ubuntu 17.04): apt-get install default-jre daemon [nginx] #Other OS: install openjdk8-jre [n ...

  9. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  10. 使用PHP如何去除字符串结尾的字符

    前言 在工作中遇到一个需求:一串字符串,如"迅雷官方下载"."快播5.0下载",需要去掉他们结尾的"官方下载"和"下载" ...