`
江米小枣
  • 浏览: 50575 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

根据时间得到该年第几周和根据周得到时间区间

阅读更多
根据时间得到该时间是该年第几周:
select to_number(to_char(to_date('2010-01-12 00:00:00','yyyy-mm-dd hh24:mi:ss'),'FMWW')) from dual;
2010年1月12日属于2010年第2周
select to_number(to_char((sysdate),'FMWW')) from dual;
判断当前时间属于当前年第几周
以上情况只是把每年的1月1日作为第一天,如同这个oracle语句的效果:
select to_char(sysdate,'iw') from dual
按照国际标准是吧每年第一周的星期一作为这一年的开头:
select to_char(sysdate,'ww') from dual

根据第几周的到时间区间:
1>A跨年:
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar calFirstDayOfTheYear = new GregorianCalendar(2010,
    Calendar.JANUARY, 1);
calFirstDayOfTheYear.add(Calendar.DATE, 7 * (5-1));
   
int dayOfWeek = calFirstDayOfTheYear.get(Calendar.DAY_OF_WEEK);
   
Calendar calFirstDayInWeek = (Calendar)calFirstDayOfTheYear.clone();
calFirstDayInWeek.add(Calendar.DATE,
calFirstDayOfTheYear.getActualMinimum(Calendar.DAY_OF_WEEK) - dayOfWeek);
Date firstDayInWeek = calFirstDayInWeek.getTime();
System.out.println(2010 + "年第" + 5 + "周的第一天是" + df.format(firstDayInWeek));
   
Calendar calLastDayInWeek = (Calendar)calFirstDayOfTheYear.clone();
calLastDayInWeek.add(Calendar.DATE,
calFirstDayOfTheYear.getActualMaximum(Calendar.DAY_OF_WEEK) - dayOfWeek);
Date lastDayInWeek = calLastDayInWeek.getTime();
System.out.println(2010 + "年第" + 5 + "周的第一天是" + df.format(lastDayInWeek));

-----------------------------
2010年第5周的第一天是2010-01-24
2010年第5周的最后一天是2010-01-30

1>B跨年:
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
int x=2010;
int n=53;
Calendar cal = new GregorianCalendar(x, Calendar.JANUARY, 1);

int ff=cal.get(Calendar.DAY_OF_WEEK);
int week=cal.get(Calendar.WEEK_OF_YEAR);
System.out.println("week:"+week);
System.out.println("ff:"+ff);
switch(ff){
case 1:
cal.set(Calendar.DATE,7*(n-2)+ff+7);
break;
case 2:
cal.set(Calendar.DATE,7*(n-2)+ff+6);
break;
case 3:
cal.set(Calendar.DATE,7*(n-2)+ff+5);
break;
case 4:
cal.set(Calendar.DATE,7*(n-2)+ff+4);
break;
case 5:
cal.set(Calendar.DATE,7*(n-2)+ff+3);
break;
case 6:
cal.set(Calendar.DATE,7*(n-2)+ff+2);
break;
case 7:
cal.set(Calendar.DATE,7*(n-2)+ff+1);
break;

}

System.out.println("cal 1:"+df.format(cal.getTime()));
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("dayOfWeek :"+dayOfWeek);
Calendar calFirstDayInThisWeek = (Calendar) cal.clone();
calFirstDayInThisWeek.add(Calendar.DATE, cal.getActualMinimum(Calendar.DAY_OF_WEEK)-dayOfWeek);
Calendar calLastDayInThisWeek = (Calendar) cal.clone();
calLastDayInThisWeek.add(Calendar.DATE,cal.getActualMaximum(Calendar.DAY_OF_WEEK)-dayOfWeek);
Date startDate=calFirstDayInThisWeek.getTime();
Date endDate=calLastDayInThisWeek.getTime();
System.out.println("calFirstDayInThisWeek:"+df.format(calFirstDayInThisWeek.getTime()));
System.out.println("calLastDayInThisWeek:"+df.format(calLastDayInThisWeek.getTime()));
System.out.println("startDate:"+df.format(startDate.getTime()));

---------------------------------
week:1
ff:6
cal 1:2010-12-31
dayOfWeek :6
calFirstDayInThisWeek:2010-12-26
calLastDayInThisWeek:2011-01-01
startDate:2010-12-26

2>不跨年:
long ONEDATE = 1000l * 3600 * 24;
SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd ");
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.YEAR, 2005);

//最后一周
cal.set(Calendar.DAY_OF_YEAR, cal.getActualMaximum(Calendar.DAY_OF_YEAR));
Date end = cal.getTime();

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date start = cal.getTime();

System.out.print( "2005年最后一周区间: " + format.format(start));
System.out.println( "-- " + format.format(end) + " 共 " + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天 ");


//第一周
cal.set(Calendar.DAY_OF_YEAR, 1);
cal.set(Calendar.YEAR, 2006);
start = cal.getTime();

cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
end = cal.getTime();

System.out.print( "2006年第一周区间: " + format.format(start));
System.out.println( "-- " + format.format(end) + " 共 " + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天 ");

//第N周
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//需要先设置星期
cal.set(Calendar.WEEK_OF_YEAR, 20);

start = cal.getTime();

cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
end = cal.getTime();

System.out.print( "2006年第20周区间: " + format.format(start));
System.out.println( "-- " + format.format(end) + " 共 " + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天 ");

--------------------------------------
2005年最后一周区间: 2005-12-26 -- 2005-12-31  共 6天
2006年第一周区间: 2006-01-01 -- 2006-01-01  共 1天
2006年第20周区间: 2006-05-08 -- 2006-05-14  共 7天

PS:非原创,素材来自网络.
分享到:
评论
2 楼 江米小枣 2010-11-12  
dk101 写道
你这个总结得很详细了。以后使用时,直接在这儿查找就可以了。

呵呵 有的地方还不是很精确。
1 楼 dk101 2010-11-09  
你这个总结得很详细了。以后使用时,直接在这儿查找就可以了。

相关推荐

    sqlserver 计算当月所有自然周的区间。

    根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念...

    DateUtils.java

    "日期转字符串","字符串转日期","获取当前日期的本周一是几号","获取当前日期周的最后一天","根据日期区间获取月份列表","根据日期获取年度中的周索引","根据年份获取年中周列表","获取某年的第几周的开始日期",...

    js计算两个日期相差几周

    - 当处理不同时间区间的日期时,需注意时区差异可能导致的误差。 - 应考虑到闰年和平年对日期计算的影响。 #### 扩展知识点 - **国际化与本地化**:在处理涉及多语言或多地区的日期时,可以考虑使用 `Intl....

    Python 日期区间处理 (本周本月上周上月...)

    它通过简单的年份加减来得到结果,并返回起始年份的第一天与结束年份的最后一天作为时间区间。 所有这些方法的实现都依赖于Python标准库中的`datetime`模块,它提供了丰富的日期和时间处理功能。为了使代码更加直观...

    易语言时间操作解析

    易语言提供了获取星期数的函数,如“取星期数”,可以得到指定日期是一年中的第几周,或者一个月的第几周。这对于日历应用或者时间统计来说非常有用。 "取得星座"是根据出生日期确定对应的星座,这需要知道每个月份...

    有关日期与周数的相互转换

    - 从YYYY年1月1日(D1=YYYY/01/01)开始,向前或向后移动7*S天,得到该周的第一天。这是通过简单的加法完成的。 - 计算1月1日是星期几(Y),这个值同样可以通过编程语言的日期函数获取。 - 为了得到一周的第一天...

    java获取指定开始时间与结束时间之间的所有日期

    要实现Java获取指定开始时间与结束时间之间的所有日期,我们需要使用Java的日期和时间相关类,包括`java.text.SimpleDateFormat`和`java.util.Calendar`。下面是一个简单的示例代码: ```java import java.text....

    Mysql指定日期区间的提取方法

    4. `WEEK(date)`:返回日期是一年中的第几周,可以根据`WEEK_MODE`参数调整计算方式。 5. `DAY(date)`:返回日期是当月的第几天。 6. `HOUR(time)`:返回时间的小时部分。 7. `MINUTE(time)`:返回时间的分钟部分。 ...

    js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期

    接着,通过`getDay()`方法获取当前日期是一周中的第几天,`getDate()`获取当前日,`getMonth()`获取当前月,以及`getYear()`获取当前年份。由于JavaScript的`getYear()`返回的是两位数的年份,因此我们需要将小于...

    数据处理Pandas-获取日期区间的数据-Python实例源码.zip

    7. **时间区间分桶**:`pd.cut()`和`pd.interval_range()`可用于将日期时间数据分配到特定的日期区间或时间段,这对于分组分析非常有帮助。 8. **与网络爬虫结合**:在数据抓取过程中,我们可能需要处理网页上的...

    基于新距离测度的IGOWLA算子区间组合预测模型

    而针对区间数的研究,如周礼刚、林义征、周远翔和胡凌云等人,他们通过引入不同的精度指标,如向量夹角余弦、灰色关联度和区间数距离,构建了区间型组合预测模型。 总结而言,本文提出的基于新距离测度的IGOWLA算子...

    Oracle时间操作大全.docx

    - `to_char()` 函数可以将日期转换为字符串,配合格式模型可以提取日期的特定部分,如 `to_char(sysdate,'fmww')` 得到今年的第几周。 - `trunc()` 函数可以将日期截断到指定的单位,如 `trunc(sysdate,'day')+1` ...

    易语言取本周开始结束日期源码-易语言

    根据这个信息,我们可以计算出本周第一天的日期,通常是当前日期减去与当前星期几的差值。 一旦我们得到了本周开始日期,结束日期就相对简单了。一周通常有7天,所以结束日期是开始日期加上6天。这样我们就有了一个...

    北京商品住宅新开盘监测报告(第08周).zip

    2. **新开盘项目**:报告会列出第八周内开盘的商品住宅项目,包括项目名称、位置、开发商、开盘时间、房源数量、户型结构、价格区间等基本信息,这有助于购房者比较不同项目并做出选择。 3. **销售业绩**:报告可能...

    C#获取两个时间的时间差并去除周末(取工作日)的方法

    我们可以通过检查`start.DayOfWeek`来确定起始日期是星期几,然后根据起始日期和剩余天数`yuDay`来判断有多少天是周末。这里有一个复杂的条件判断,用于区分不同的情况: ```csharp switch (start.DayOfWeek) { //...

    09年建模B题眼科医院的病床安排

    为了提前告知病人大致入住时间区间,可以建立预测模型,根据当前住院病人及等待住院病人的统计情况来进行预测: 1. **历史数据分析**:分析过去一段时间内类似病人住院时间的分布情况,以此为基础预测新入院病人的...

    前端项目-d3-time.zip

    3. **时间区间计算**:能够计算两个时间点之间的差值,对于项目管理和任务追踪非常有用。 4. **时区处理**:考虑到全球化的用户群体,时间习惯计算器可能支持不同地区的时区设置,确保无论用户身在何处,都能得到...

    24小时行动计划表格式.doc

    这份文档以表格的形式,将一天的24小时分解为多个时间区间,从而实现对每个小时的精细化安排。 24小时行动计划表通常包含以下元素: 1. **日期与星期**:表格的最上方会列出具体的日期以及对应的星期,以便于我们...

    数学建模09年真题及国家一等奖论文原稿

    4. **随机模拟与Monte-Carlo算法**:在问题三中,作者使用Monte-Carlo模拟来预测病人的就诊过程,通过模拟得到等待入院时间的最大值和最小值的期望,构建了一个预测区间。然而,报告指出缺乏置信度的概念,这在统计...

    最新五年级上册数学应用题解答问题专题练习(含答案)(3).doc

    6. 电费计算:根据电费收费标准,可以将电费分为几个区间,分别计算每个区间的费用,然后加总得出总费用。 7. 汽车油耗计算:根据汽车现有的油量和每升汽油能行驶的距离,可以计算出行驶全程需要的额外油量。 8. ...

Global site tag (gtag.js) - Google Analytics