0 0

JAVA Calendar 获取年份与周数5

输入一个字符日期,通过Calendar 获取 到日期对应的周数及 周所在的年份
特别是跨年的情况:
先贴代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cl = Calendar.getInstance();
cl.setTime(sdf.parse("2012-12-31"));
int week = cl.get(Calendar.WEEK_OF_YEAR);
System.out.println(week);

结果是 1 这个没有疑问.
这个1 明显是2013年的第一周 我怎样也能获取到 2013呢

直接通过 cl.ge(Calendar.YEAR);  得到2012

想要的结果其实 是:
输入2012-12-31
能得到 是 2013 年 的第 1 周
2012年12月28日 17:58

3个答案 按时间排序 按投票排序

0 0

采纳的答案

这是Calendar的内部机制的问题,根据正常的逻辑,它是没有错的,你想得到2013年第1周,应该去做一下判断,因为2012-12-31确实是2012年,它不是2013年,所以要做一下处理,得到周数之后,可以根据7天前的周数来做一下对比,如果7天前的周数小于当日周数,则表示为正常周数和正常年份,如果7天前的周数大于当日周数,表示当日在年尾,并且当日周数被计算在下一年,此时要在得到的年份是+1,下边是代码,你自己看看理解一下吧。

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
		Calendar cl = Calendar.getInstance(); 
		cl.setTime(sdf.parse("2012-12-31")); 
		int week = cl.get(Calendar.WEEK_OF_YEAR); 
		System.out.println(week); 
		cl.add(Calendar.DAY_OF_MONTH, -7);
		int year = cl.get(Calendar.YEAR);
		if(week<cl.get(Calendar.WEEK_OF_YEAR)){
			year+=1;
		}
		System.out.println(year+"年第"+week+"周"); 

2012年12月29日 08:39
0 0

int year = 0;
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
        int year1 = calendar.get(Calendar.YEAR); 
        calendar.add(Calendar.DAY_OF_MONTH, -7); 
        int year2 = calendar.get(Calendar.YEAR); 
        int weekBefore = calendar.get(Calendar.WEEK_OF_YEAR);
        if(weekNo<weekBefore){ 
            year2+=1;
            year = year2;
        }else{
        year = year1;
        }
        System.out.println(year+"年第"+weekNo+"周");

2019年1月18日 17:25
0 0

这个week_of_year和两个值有关。
firstDayOfWeek: 用周几作为一周的第一天,我们默认的是SUNDAY,德国的是周三(这个和本地化有关)
minimalDaysInFirstWeek: 一年的第一周用几号开始算

System.out.println(cl.getFirstDayOfWeek()); //SUNDAY
System.out.println(cl.getMinimalDaysInFirstWeek());//1

打印出来的结果是从周日开始做为1周的开始,新年的第一天从1号开始。

2012年最后几天的日历如下:

周日  1   2   3   4   5   6  

30号  31  1[size=medium][/size]   2   3   4   5

新年的第一天是1号(minimalDaysInFirstWeek)在周二,一周必须由7天组成,又是从周日(firstDayOfWeek)开始算起,所以30,31都属于第1周就等到了楼主说的结果。

要跟这个原理可以分别修改这两个属性可以提到不同的结果。
方法1:
cl.setFirstDayOfWeek(Calendar.TUESDAY);

修改每周从周二开始,而周2正好是1号,所以12-31的week值为53
方法2:
cl.setMinimalDaysInFirstWeek(6);

修改新年从6号开始算起,6号正好是周日,一周的开始,所以6号前的7天的week值都是53.

2012年12月28日 22:50

相关推荐

    oracle sql 根据年份、周数取日期

    oracle sql 根据年份、周数取日期

    Sql查询获取周数Sql获取从星期一开始的周数

    因为线上查找过大部分的获取将星期一作为一周开始的周数的思路在特定日期都有一些问题,因项目需要有此功能,经过项目验证,计算准确无误(未发现有任何日期计算错语)。例如: select [dbo].[get_weekNumber]('2021...

    利用Java中Calendar计算两个日期之间的天数和周数

    Java 语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。...下面这篇文章就给大家介绍了如何利用Java中Calendar计算两个日期之间的天数和周数,下面来一起看看吧。

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

    有关日期与周数的相互转换,当日期在星期五以前返回本周,否则返回下一周。一周的开始是星期一

    js获取指定日期周数以及星期几的小例子

    JS获取日期时遇到如下需求,根据某年某周获取一周的日期。如开始日期规定为星期四到下一周的星期五为一周。 代码如下: function getNowFormatDate(theDate) { var day = theDate; var Year = 0; var Month = 0; ...

    周数获取.txt

    一共有两个方法,获取每个月有几周和获取当前登录时间是属于该月的第几周,测试没问题,已经用到实际项目中运行,文档中有联系方式,望跟各位大神交流

    c#获取当前年的周数及当前月的天数示例代码

    获取当前年的周数 代码如下: ///  /// 获得今年有几周 ///  /// ”year”&gt; /// &lt;returns&gt;&lt;/returns&gt; public int GetWeekOfYear(int year) { DateTime the_Date = new DateTime(year,1,1);//本年的第一天 ...

    python根据时间获取周数代码实例

    时间和周数 import time import datetime # 获取今天是第几周 print(time.strftime('%W')) # 获取当前是周几(0-6,0代表周一) today=datetime.datetime.now().weekday() # 获取指定日期属于当年的第几周 week=...

    自动计算周数

    选择一个时间自动计算周数,自己写的,有什么意见可以提出来,大家一起交流

    Oracle数据库的周数计算

    Oracle数据库的周数计算 日期计算,算第n周的第一天及最后一天是几号。 公式...

    怀孕天数周数预产期计算器

    怀孕天数周数计算器是一个能够自动计算和显示怀孕天数、预产期和剩余天数的小工具。 为老婆制作的,vb6编制的。 对前一版本稍有改动。

    JS获取月份最后天数、最大天数与某日周数的方法

    本文实例讲述了JS获取月份最后天数、最大天数与某日周数的方法。分享给大家供大家参考,具体如下: &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt; &lt;title&gt;标题页&lt;/title&gt; [removed]...

    vecka:获取当前周数

    获取当前周数。 安装 npm install vecka 例子 var vecka = require ( 'vecka' ) ; console . log ( vecka . nu ( ) ) ; // 44 命令行界面 npm install -g vecka $ vecka 44 应用程序接口 现在() 以数字形式...

    周日历选择插件jcalendar_week

    //获取周第一天方法weekfirstdate(),传入年份和周数 console.log(weekfn.weekfirstdate(2018,36)); //获取传入日期为当年第几周getweeknum(),传入年,月,日(注:这里的月份从0开始) console.log(weekfn.getweeknum...

    java 采用单例模式计算当年一共有多少个周,并列出所有周和每一周所对应的时间段(内含注释)

    采用单例模式计算并列出所有周和每一周所对应的时间段,并可获取当前日期、当期日期属于星期几、当前日期属于全年的第几个周(或可通过修改关键字获得当前日期属于当月的第几个周),内含有详细的注释。

    Java如何获得系统时间

    import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class TimeTest { //用来全局控制 上一周,本周,下一周的周数变化 private int weeks = 0; private in

Global site tag (gtag.js) - Google Analytics