java获取一年的周数和间隔天数
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获取一年的周数和间隔天数的更多相关文章
- java获取当前上一周、上一月、上一年的时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...
- C# 获取当前日期当年的周数
这几天跨年,项目上遇到了一个周数计算的问题. 2016年的元旦是周五开始的,之前系统计算的是属于15年的第53个周,但是年份已经到了16年了. 公司要求从1月1号周五开始算作16年的第一个周,今天1月 ...
- JAVA获取当前日期时间所在周的周一和周日日期
/** * 获取当前时间所在周的周一和周日的日期时间 * @return */ public static Map<String,String> getWeekDate() { Map&l ...
- Java获取当前第几周【转】
本文copy自:http://swxzqsd.blog.sohu.com/156208509.html 作者:camelcanoe String today = "2010-01-11&qu ...
- java获取当前日期所在的周的周一,并以周一为一周开始
public String getMonday(String date) { if (date == null || date.equals("")) { System.out.p ...
- java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...
- Java获取某年某周的第一天
Java获取某年某周的第一天 1.设计源码 FirstDayOfWeek.java: /** * @Title:FirstDayOfWeek.java * @Package:com.you.freem ...
- sql 中,如何获取两个日期之前月数、周数、天数
1.获取两个日期之间的月数.周数.天数语法 --1.获取两个日期之间的月数.周数.天数 --1.1)声明参数 ) ) --1.2)获取两个日期直接的月数 select DATEDIFF(MM,@sta ...
- Java获取日期属于当年第几周
String today = "2013-01-14"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM- ...
随机推荐
- Java在线备份和还原MySQL数据库。
2018年6月29日14:00:48 阅读数:1534 今天整了整整一整天,终于使用Java在线备份和还原MySQL数据库了,哎,备份倒是很快,就是在还原的时候遇到了一个问题,也不报错,结果将sql语 ...
- python函数之各种器
一: 装饰器 1:装饰器模板 def wrapper(func): def inner(*args,**kwargs): ret =func(*args,**kwargs) return ret re ...
- phoenix表操作
phoenix表操作 进入命令行,这是sqlline.py 配置到path环境变量的情况下 sqlline.py localhost如果要退出命令行:!q 或者 !quit 3.4.1 创建表 ...
- PAT Basic 1069. 微博转发抽奖(20)
小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数M(<= 1000).N ...
- Senparc.Weixin微信开发(2) 消息机制和上下文(Session)
了解MessageHandler 为项目添加一个CustomMessageHandle.cs类 public class CustomMessageHandler : MessageHandler&l ...
- Python_logging模块
日志:方便用户了解系统.软件或应用的运行情况,及时发现问题并快速定位.解决问题. 一个日志信息对应的是一个事件的发生,而一个事件需要包括的几个内容: 事件发生时间 事件发生位置 事件发生严重程度(日志 ...
- eclipse启动web应用
在建好web项目的基础上: (1)配置tomcat服务器 点击window---->Preference----->Server---->Runtime Environment--- ...
- Codeforces 806 D. Perishable Roads Dijkstra
原文链接https://www.cnblogs.com/zhouzhendong/p/CF806D.html 题目传送门 - CF806D 题意 给定一个 n 个点的无向完全图,每一条边有一定的边权. ...
- BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
原文链接http://www.cnblogs.com/zhouzhendong/p/9016336.html 题目传送门 - BZOJ4319 题意 给出一个$1,2,\cdots,n$的排列,第$i ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...