- 浏览: 476066 次
- 性别:
- 来自: 上海转北京
-
文章分类
最新评论
-
fendou123321:
又仔细看了下,如果设置周日为每周的第一天,应该是正确的,如果把 ...
已知起始日期,求两日期之间共有多少自然周 -
fendou123321:
开始日期2016-12-19结束日期2017-02-05只用博 ...
已知起始日期,求两日期之间共有多少自然周 -
江奇缘:
郁闷了半天,看了文章才知道连错库了!!想揍自己一顿
今天很郁闷java.sql.SQLException: ORA-00904:标识符无效 -
zbs506:
太感谢了,
今天很郁闷java.sql.SQLException: ORA-00904:标识符无效 -
那可不就是我嘛:
幸亏我看了十分钟就来搜了,感谢楼主。
今天很郁闷java.sql.SQLException: ORA-00904:标识符无效
今天对于日期这个问题花的时间比较多,在这里总结一下,由于考虑到自然周问题,还有时间跨度的问题,两个年份之间的临界条件上的考虑,还要考虑到一个年份共有多个周,比较复杂了。这里写了一个完整的Demo版本,贴出来分享一下。
package com.inventec.singular.service.blog; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateDiff { public static String formatDate(Date date) { String formDate = ""; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); formDate = format.format(date); return formDate; } public static Date formatDate(String date) throws ParseException { Date time = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); time = format.parse(date); return time; } /** * 计算指定年度共有多少个周。 * * @param year * 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static int getWeekNumByYear(final int year) { if (year < 1900 || year > 9999) { throw new NullPointerException("年度必须大于等于1900年小于等于9999年"); } int result = 52;// 每年至少有52个周 ,最多有53个周。 String date = getYearWeekFirstDay(year, 53); if (date.substring(0, 4).equals(year + "")) { // 判断年度是否相符,如果相符说明有53个周。 // System.out.println(date); result = 53; } return result; } /** * 计算某年某周的开始日期 * * * @param yearNum * 格式 yyyy ,必须大于1900年度 小于9999年 * * @param weekNum * 1到52或者53 * @return 日期,格式为yyyy-MM-dd */ public static String getYearWeekFirstDay(int yearNum, int weekNum) { Calendar cal = Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日 cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 每周从周日开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期日的那个周。 cal.setMinimalDaysInFirstWeek(7); // 设置每周最少为7天 cal.set(Calendar.YEAR, yearNum); cal.set(Calendar.WEEK_OF_YEAR, weekNum); // 分别取得当前日期的年、月、日 return formatDate(cal.getTime()); } public static int weeksBetweenDays(String start, String end) { int counts = 1; Calendar c = Calendar.getInstance(); Calendar c1 = Calendar.getInstance(); try { Date startDate = formatDate(start); Date endDate = formatDate(end); c.setTime(startDate); c1.setTime(endDate); int weekofYear = c.get(Calendar.WEEK_OF_YEAR); int weekofYear1 = c1.get(Calendar.WEEK_OF_YEAR); System.out.println("start:" + weekofYear + " end week:" + weekofYear1); if (c.get(Calendar.YEAR) == c1.get(Calendar.YEAR)) { counts = weekofYear1 - weekofYear + 1; } else { int difyear = c1.get(Calendar.YEAR) - c.get(Calendar.YEAR); // System.out.println("year diff =" + difyear + " starty=" + c.get(Calendar.YEAR)); if (difyear == 1) {// 年份相差一年 int startyearWeeks = getWeekNumByYear(c.get(Calendar.YEAR)); String date = getYearWeekFirstDay(c.get(Calendar.YEAR), startyearWeeks); System.out.println(date); int ds = java.sql.Date.valueOf(date).compareTo( java.sql.Date.valueOf(start)); System.out.println(ds); if (ds <= 0) { // 这一年最后一周的开始一天小于用户选择的开始日期,比如,2009年最后一周的开始日期是2009-12-27号,所以开始日期大于或等于2009-12-27号的特殊处理。 counts = weekofYear1 - weekofYear + 1; } else { counts = getWeekNumByYear(c.get(Calendar.YEAR)) - weekofYear + weekofYear1 + 1; } } else if (difyear > 1) {// 年份相差大于一年时,要考虑到 for (int i = 0; i <= difyear; i++) { int startAllWeeks = getWeekNumByYear(c .get(Calendar.YEAR) + i); // 开始日期的年份+i,如2007-12-22到2011-01-09,这里是遍历出07年,08年,09年分别有多少个周 if (i == 0) {//开始日期这一年的周差,如果07-12-22是第51周,07年共有52个周,那么,这里得到1. counts = startAllWeeks - weekofYear; } else if (i < difyear) {//除开始日期与结束日期所在一年的年份的周差。也就是08年共有多少周 counts += startAllWeeks; } else if (i == difyear) { //加上09年所在的周 counts += weekofYear1; } } counts += 1; } } // } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return counts; } public static void main(String[] args) { int days = weeksBetweenDays("2009-12-28", "2010-11-03"); // String date="2010-01-06"; // String date1="2010-01-04"; // int // ds=java.sql.Date.valueOf(date).compareTo(java.sql.Date.valueOf(date1)); // System.out.println(ds); System.out.println("the weeks of this period is :" + days); } }
评论
4 楼
fendou123321
2017-02-13
又仔细看了下,如果设置周日为每周的第一天,应该是正确的,如果把每周的第一天改为其他值,就需要调整代码了
3 楼
fendou123321
2017-02-13
开始日期2016-12-19
结束日期2017-02-05
只用博主代码运行出来 相差周次是8
其实应该是7
中间有一个周是跨年的2016-12-26 2017-01-01
结束日期2017-02-05
只用博主代码运行出来 相差周次是8
其实应该是7
中间有一个周是跨年的2016-12-26 2017-01-01
2 楼
远去的渡口
2010-01-28
@老抛,
没想到大牛人物还看了我这种算法,激动一下
当初也考虑过这么计算,但是感觉时间跨度为几年的话就要循环很多次,我这里算是避开了几整年的自然周之和,因为一年有多少周可以一步到位,只是我这样考虑的因素就复杂了点
没想到大牛人物还看了我这种算法,激动一下

当初也考虑过这么计算,但是感觉时间跨度为几年的话就要循环很多次,我这里算是避开了几整年的自然周之和,因为一年有多少周可以一步到位,只是我这样考虑的因素就复杂了点
1 楼
抛出异常的爱
2010-01-28
先找到star日的指定周日
再一周一周加过去
当时间大于结束时间时\
就得出了周数.
效率没你的高
但看起来会更清楚一些
再一周一周加过去
当时间大于结束时间时\
就得出了周数.
效率没你的高
但看起来会更清楚一些
发表评论
-
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching解决方案
2013-11-13 17:27 19803今天写一个接口,所有的都写完了后来测试。整个项目是用spri ... -
java.lang.UnsupportedClassVersionError及tomcat启动servlet-api.jar not loaded
2013-07-30 18:01 1294今天API对接这块遇到 ... -
Myeclipse快捷方式设置
2013-07-08 15:18 863Content (内容助手)的快捷键“Ctrl+Space” ... -
正则表达式判断中文或全角字符
2012-09-18 13:14 6624Flex中一文本框,其值的length取出的是字符个数,并不是 ... -
Eclipse中xml配置文件报错原因总结
2012-05-15 11:40 136731)使用Eclipse开发工具,从SVN或者GIt上down下 ... -
正则表达式判断字符串是数字,可以是负数,含有小数点
2012-04-09 14:49 8857正则表达式判断字符串是数字,可以为正数,可以为负数,不能含有字 ... -
java.net.SocketException: Broken pipe 错误原因
2012-03-07 12:00 13607警告: Error sending end packe ... -
java工程不能使用Server发布到tomcat问题
2011-10-08 17:02 21240最近接手另一个项目trsBackEnd,将工程从git上clo ... -
Tomcat启动时错误IOException while loading persisted sessions: java.io.EOFException
2010-10-08 15:58 1474一直用tomcat一段时间都正常无事,TomCat6在 ... -
Web Application Stress Tool压力测试工具使用
2010-03-19 23:56 5627随着Web 2.0技术的迅速发展,许多公司都开发了一些 ... -
for循环优化
2010-03-19 18:51 2212到金蝶去面试了一下,结果在笔试就差不多挂了,因为自己都感觉做 ... -
java中易模糊概念总结(一)
2010-01-26 18:04 1383今天准备重新再研究一 ... -
得到tomcat目录的方法
2009-12-31 18:00 1352String tomcatPath = System.getP ... -
特殊字符转义与验证问题
2009-12-16 14:25 10981、 验证输入的是数字 Function checkmate ... -
保留两位小数,用JS实现与fmt标签实现
2009-12-16 14:23 118963、 小数点保留两位: 3.1 用JSTL标签中的fmt ... -
已知年月,计算这月的天数
2009-12-16 14:21 1333public static int getDaysByMont ... -
3、 已经一个日期,yyyy-MM-dd格式,从当前日期倒推num天,返回这一日期集合。
2009-12-16 14:19 26213、 已经一个日期,yyyy-MM-dd格式,从当前日期倒推n ... -
已经年,第x周,计算这周的开始日期与结束日期
2009-12-16 14:18 27682、 已知年,第x周,获取这一周的周日与周六日期(一周起始时间 ... -
知道年月日计算这一天是第x周
2009-12-16 14:16 1839/** * 最后修改于2010-1-1 ... -
JSTL的简单使用
2009-11-19 19:31 989Java-JSTL(JSP标准标签库)(转) 关键字: jst ...
相关推荐
1. 日期推断:根据题目,13日是星期四,30日是星期日。 2. 形状变换与周长:将长方形框架拉成平行四边形,周长不变。 3. 观众人数估算:学校礼堂大约能容纳观众的人数是49 × 32 ≈ 1500人。 4. 组合问题:小明有4本...
1、从弹框中,分两次输入两个数字,分别保存在 a 和 b中 2、如果 a 大于 b的话 ,则交换两个数字的位置 使用 短路&&,扩展赋值运算符,位运算 4、条件运算符(三目运算) 单目(一元)运算符 :++,--,! 双目(二元)...
这里的IDE设备包括了IDE硬盘和IDE光驱,第一、第二组设备是指主板上的第一、第二根IDE数据线,一般来说靠近芯片的是第一组IDE设备,而主设备、从设备是指在一条IDE数据线上接的两个设备,大家知道每根数据线上可以接...
wangtengfei-hn_EmployeesExample_23540_1745868671962
scratch少儿编程逻辑思维游戏源码-汽车冲突.zip
scratch少儿编程逻辑思维游戏源码-棱镜.zip
少儿编程scratch项目源代码文件案例素材-直升机坠毁.zip
输入法优化与定制_五笔编码编辑与词库管理_Rime输入法引擎与86极点码表_跨平台五笔码表编辑器工具_for_macOS与Windows系统_支持用户自定义词条添加删除与排序_提供
少儿编程scratch项目源代码文件案例素材-主题乐园大亨.zip
scratch少儿编程逻辑思维游戏源码-迷失在像素平原.zip
少儿编程scratch项目源代码文件案例素材-纸格通关 云变量.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
scratch少儿编程逻辑思维游戏源码-深入海底.zip
驾校自动化_网页自动化爬虫技术_Python27多线程HTTP请求模拟_龙泉驾校2014版约车系统自动预约助手_通过模拟登录和循环请求实现自动约车功能_支持失败自动递增车号重试_
scratch少儿编程逻辑思维游戏源码-南瓜危机.zip
scratch少儿编程逻辑思维游戏源码-皮博冒险者.zip
基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档
用于释放电脑的内存,很好用。
scratch少儿编程逻辑思维游戏源码-气球足球.zip
ollama 0.6.6.0官网下载,不方便的可以从这里下载