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

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. common配置文件

    <dependencies> <dependency> <groupId>com.github.pagehelper</groupId> <art ...

  2. RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云

    阿里云RAM (Resource Access Management)为客户提供身份与访问控制管理服务.使用RAM,可以轻松创建并管理您的用户(比如雇员.企业开发的应用程序),并控制用户对云资源的访问 ...

  3. Ext 行模型与Grid视图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. STM32嵌入式开发学习笔记(六):串口通信(上)

    本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CT ...

  5. 使用maven插件反向映射generatorConfig.xml生成代码

    一.配置Maven pom.xml 文件 <!-- 反向映射 --> <plugin> <groupId>org.mybatis.generator</gro ...

  6. golang 读取 ini配置信息

      package main //BY: 29295842@qq.com//这个有一定问题   如果配置信息里有中文就不行//[Server] ;MYSQL配置//Server=localhost   ...

  7. WIN7下怎么安装iis教程

    点击开始→控制面板,然后再点击程序,勿点击卸载程序,否则到不了目标系统界面. 2 然后在程序和功能下面,点击打开和关闭windows功能. 3 进入Windows功能窗口,然后看到internet信息 ...

  8. 【一】Jmeter接口自动化测试系列之参数化方法

    Jmeter作为虽然作为一款和LoadRunner相媲美的性能测试工具,但参数化功能实在不咋地,这里我大概总结了一下Jmeter的参数化方法! 至于参数化的用途,我这里就不多说了,做测试的都明白吧!本 ...

  9. 第一章 Linux是什么

    Linux是核心与系统调用接口两层中间的操作系统 不同硬件的功能函数并不相同,IBM的Power CPU与Inter的x86架构不同,所以同一套操作系统是不能在不同的硬件平台上面运行的.也就是说,每种 ...

  10. C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定

    代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...