java获取一年的周数和间隔天数

 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;

 public class Test {

     private static Date deformatDatetime(String strDate, String fmt) {
         try {
             if (fmt == null) {
                 return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                         java.util.Locale.ENGLISH)).parse(strDate);
             } else {
                 return (new SimpleDateFormat(fmt, java.util.Locale.ENGLISH))
                         .parse(strDate);
             }
         } catch (ParseException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             return null;
         }
     }
     private static String datetimeToString(Date dt, String fmt) {
         if (fmt == null) {
             return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                     java.util.Locale.ENGLISH)).format(dt);
         } else {
             return (new SimpleDateFormat(fmt, java.util.Locale.ENGLISH))
                     .format(dt);
         }
     }
     private static class DateRange{
         public Date startDate;
         public Date endDate;
         public DateRange(){

         }
         public DateRange(Date dt1,Date dt2){
             startDate=dt1;
             endDate=dt2;
         }
     }
     /**
      * 根據年份獲得該年所有周次及每周的開始-結束日期
      * @param pvnYear
      * @return
      */
     private static LinkedHashMap<Integer,DateRange> getWeeksDetByYear(int pvnYear){
         LinkedHashMap<Integer, DateRange> lvRet=new LinkedHashMap<Integer,DateRange>();
         Calendar lvCal=Calendar.getInstance();
         lvCal.setFirstDayOfWeek(Calendar.MONDAY);

         Date lvDt=deformatDatetime(String.valueOf(pvnYear)+"-01-01 00:00:00", null);
         lvCal.setTime(lvDt);
         int lvWeek=1;
         while (true) {
             lvCal.set(Calendar.DAY_OF_WEEK, lvCal.getFirstDayOfWeek()); // Monday
             Date lvFirstDt=lvCal.getTime();
             if (lvFirstDt.getYear()+1900<pvnYear){
                 lvFirstDt=lvDt;
             }
             if (lvFirstDt.getYear()+1900>pvnYear) break;
             lvCal.set(Calendar.DAY_OF_WEEK, lvCal.getFirstDayOfWeek()+6); // Sunday?
             Date lvLastDt=lvCal.getTime();
             if (lvLastDt.getYear()+1900>pvnYear){
                 lvLastDt=deformatDatetime(String.valueOf(pvnYear+1)+"-01-01 00:00:00", null);
                 lvCal.setTime(lvLastDt);
                 lvCal.add(Calendar.DAY_OF_YEAR, -1);
                 lvLastDt=lvCal.getTime();
             }
             lvRet.put(Integer.valueOf(lvWeek), new DateRange(lvFirstDt, lvLastDt));
             lvWeek++;
             lvCal.add(Calendar.WEEK_OF_YEAR, 1);
         }
         return lvRet;
     }
     public static void main(String[] args) throws  Exception{
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         LinkedHashMap<Integer,DateRange>  lvRet=getWeeksDetByYear(2011);
         for (Map.Entry<Integer, DateRange> item:lvRet.entrySet()){
             String startDate = datetimeToString(item.getValue().startDate,"yyyy-MM-dd");
             String endDate = datetimeToString(item.getValue().endDate,"yyyy-MM-dd");
             Date date1 = format.parse(startDate);
             Date date2 = format.parse(endDate);
             int diff = differentDays(date1,date2);
             System.out.println(String.format("Week: %d, %s - %s", item.getKey(),datetimeToString(item.getValue().startDate,"yyyy-MM-dd"),
                     datetimeToString(item.getValue().endDate,"yyyy-MM-dd"))+" ----------"+diff);
         }
     }

     public static int differentDays(Date date1,Date date2)
     {
         Calendar cal1 = Calendar.getInstance();
         cal1.setTime(date1);

         Calendar cal2 = Calendar.getInstance();
         cal2.setTime(date2);
         int day1= cal1.get(Calendar.DAY_OF_YEAR);
         int day2 = cal2.get(Calendar.DAY_OF_YEAR);

         int year1 = cal1.get(Calendar.YEAR);
         int year2 = cal2.get(Calendar.YEAR);
         if(year1 != year2)   //同一年
         {
             int timeDistance = 0 ;
             for(int i = year1 ; i < year2 ; i ++)
             {
                 if(i%4==0 && i%100!=0 || i%400==0)    //闰年
                 {
                     timeDistance += 366;
                 }
                 else    //不是闰年
                 {
                     timeDistance += 365;
                 }
             }

             return timeDistance + (day2-day1) ;
         }
         else    //不同年
         {
             return day2-day1;
         }
     }
 }

java获取一年的周数和间隔天数的更多相关文章

  1. java获取当前上一周、上一月、上一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...

  2. C# 获取当前日期当年的周数

    这几天跨年,项目上遇到了一个周数计算的问题. 2016年的元旦是周五开始的,之前系统计算的是属于15年的第53个周,但是年份已经到了16年了. 公司要求从1月1号周五开始算作16年的第一个周,今天1月 ...

  3. JAVA获取当前日期时间所在周的周一和周日日期

    /** * 获取当前时间所在周的周一和周日的日期时间 * @return */ public static Map<String,String> getWeekDate() { Map&l ...

  4. Java获取当前第几周【转】

    本文copy自:http://swxzqsd.blog.sohu.com/156208509.html 作者:camelcanoe String today = "2010-01-11&qu ...

  5. java获取当前日期所在的周的周一,并以周一为一周开始

    public String getMonday(String date) { if (date == null || date.equals("")) { System.out.p ...

  6. java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...

  7. Java获取某年某周的第一天

    Java获取某年某周的第一天 1.设计源码 FirstDayOfWeek.java: /** * @Title:FirstDayOfWeek.java * @Package:com.you.freem ...

  8. sql 中,如何获取两个日期之前月数、周数、天数

    1.获取两个日期之间的月数.周数.天数语法 --1.获取两个日期之间的月数.周数.天数 --1.1)声明参数 ) ) --1.2)获取两个日期直接的月数 select DATEDIFF(MM,@sta ...

  9. Java获取日期属于当年第几周

    String today = "2013-01-14"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM- ...

随机推荐

  1. MongoDB----提升

    文档之间的联系 一对一:通过文档内嵌的形式体现一对一的关系 db.user.insert({name:"xiaoming",frind:{name:"xiahua&quo ...

  2. bzoj 4816

    这题是莫比乌斯反演的典型题也是很有趣的题. 题意:求,其中f为为斐波那契数列 那么首先观察一下指数,发现是我们熟悉的形式,可以转化成这样的形式: 令T=kd,且假设n<m,有: 令 则原式= 这 ...

  3. CF1000G

    蜜汁树形dp... 首先分析一下:他要求一条边至多只能经过两次,那么很容易会发现:从x到y这一条路径上的所有边都只会被经过一次.(如果过去再回来那么还要过去,这样就三次了,显然不合法) 那么其他能产生 ...

  4. Vue中使用Vue.component定义两个全局组件,用单标签应用组件时,只显示一个组件的问题和 $emit的使用。

    解决方法: 定义了两个 Vue.component 在 el 中使用的时候要用 双标签, 用单表标签的时候,只会显示第个 组件间 这样写只显示 welcome-button 组件 <welcom ...

  5. Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...

  6. jquery实现全选 反选 取消

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

  7. webpack学习笔记--按需加载

    为什么需要按需加载 随着互联网的发展,一个网页需要承载的功能越来越多. 对于采用单页应用作为前端架构的网站来说,会面临着一个网页需要加载的代码量很大的问题,因为许多功能都集中的做到了一个 HTML 里 ...

  8. [转] Lodash常用API笔记

    原生用法 直接使用的API _.reject 根据条件去除某个元素. var foo = [ {id: 0, name: "aaa", age: 33}, {id: 1, name ...

  9. 一个良好划分Activity创建步骤的BaseActivity

    一个Activity的创建过程其实包含几个不同的步骤,基本上都是在onCreate函数中完成的,这些步骤主要有: 设置页面的布局文件 初始化页面包含的控件 设置页面控件的点击响应事件 处理页面的业务逻 ...

  10. 【BZOJ3514】Codechef MARCH14 GERALD07加强版 LCT+主席树

    题解: 还是比较简单的 首先我们的思路是 确定起点 然后之后贪心的选择边(也就是越靠前越希望选) 我们发现我们只需要将起点从后向前枚举 然后用lct维护连通性 因为强制在线,所以用主席树记录状态就可以 ...