`
远去的渡口
  • 浏览: 472954 次
  • 性别: Icon_minigender_2
  • 来自: 上海转北京
社区版块
存档分类
最新评论

知道年月日计算这一天是第x周

阅读更多
/**
 * 最后修改于2010-1-13,之前有一个bug,测试2009-12-28与2010-01-02应该都属于2009年第52周,
 * 2010年第一周开始日期是2010-01-03.(周日为一周的开始)
 * @param endDate
 * @return
 */
	public static String weekOfYear(String endDate) {

		String y = endDate.substring(0, 4);
		String m = endDate.substring(5, 7);
		String d = endDate.substring(8, endDate.length());
		int year = Integer.parseInt(y);
		int month = Integer.parseInt(m);
		int date = Integer.parseInt(d);
		String end = "";

		Calendar c = new GregorianCalendar(year, month - 1, date);
		c.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日

		c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 每周从周日开始

		c.setMinimalDaysInFirstWeek(7);
		String firstWeekDay = getYearWeekFirstDay(year, 1);

		int weeks = 1;

		weeks = c.get(Calendar.WEEK_OF_YEAR);

		int ds = java.sql.Date.valueOf(endDate).compareTo(
				java.sql.Date.valueOf(firstWeekDay));
		end = c.get(Calendar.YEAR) + "-" + weeks;

		if (ds < 0 && month == 1) {
			end = year - 1 + "-" + weeks;
		}
		if (weeks < 10) {
			end = c.get(Calendar.YEAR) + "-0" + weeks;
		}

				return end;

	}

 

 

String firstWeekDay = getYearWeekFirstDay(year, 1);

int ds = java.sql.Date.valueOf(endDate).compareTo(
java.sql.Date.valueOf(firstWeekDay));
if (ds < 0 && month == 1) {
end = year - 1 + "-" + weeks;
}

这里加上了这样的判断,如果这几行去掉,比如:2010-01-02应该是09年第52周,这里会是:2010-52

关键的问题在于哪里仍然不清楚。这里算是总结出这里的关键所在,只能以这种“补丁”方式自己实现正确的算法,在网上也找到不少这个问题的解答,但现在仍然没有看到有谁讲清楚,求week_of_year时,setMinimalDaysInFirstWeek()怎么设置 ,或者怎么处理???

我知道直接用c.get(Calendar.WEEK_OF_YEAR);
包括设置了c.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日
用2010-01-02来测,仍然是有问题的。

其实,对于c.setMinimalDaysInFirstWeek(days); 这一年的第一周最少有多少天?最初试过1~7,发现都是有问题的。
 

分享到:
评论

相关推荐

    用程序输出“当前时间是XXXX年XX月XX日XX时XX分XX秒(第XX周,周X)

    自学Date类(java.util.Date)和SimpleDateFormat类,用程序输出“当前时间是XXXX年XX月XX日XX时XX分XX秒(第XX周,周X)” 2 比较String与StringBuffer、StringBuilder的自增速度。方法:在自增前记录系统时间,...

    输入年月日,查询该日期是改年的第几天

    本文将深入解析一个C语言程序,其功能是接收用户输入的年、月、日,然后计算并输出该日期是该年的第几天。这不仅涉及到基本的C语言语法,如结构体的定义与使用、条件语句和循环,还涉及到对闰年规则的理解。 ### ...

    timetransym_时间系统转换_周内秒_

    儒略日是一种连续计日法,从公元前4713年1月1日中午12点开始计算,不考虑闰秒,是一个无时区的世界统一时间标准。年月日到儒略日的转换通常涉及计算特定日期相对于基准日期的天数。转换公式如下: 儒略日 = (年份 -...

    GPS 系统时间转换

    年积日是指一年中的第几天,通常用于表示某一天在一年中的位置。可以通过将指定日期转换为儒略日后减去该年第一天的儒略日来获得。 **代码实现:** ```csharp private void NJRbutton_Click(object sender, ...

    java Date获取年月日时分秒的实现方法

    此外,`Calendar.DAY_OF_WEEK`用于获取当前日期是一周中的第几天。在示例中,输出了如"星期X"这样的格式。 最后,有一个额外的`main`方法片段,尝试获取当前日期并根据日数判断是否加1或2个月。这部分代码似乎不...

    c#根据身份证计算性别 年龄

    private string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; public bool Validate(string num) { if (num.Length == 18) { ...

    人教三年级数学年月日整理和复习PPT学习教案.pptx

    - 错误的观念,如单数月份都是大月、1900年是闰年、时针一天转24圈等,需要纠正。 通过这个PPT学习教案,学生不仅可以掌握年、月、日的基本概念,还能提高他们在实际生活中的时间管理能力。教师可以利用这些材料...

    C语言100例题 很好的 包括所有知识点

    **标题描述**:给定年月日,计算这一天是一年中的第几天。 **代码解析**: - 用户输入年月日信息。 - 使用`switch-case`结构来根据月份累加天数。 - 判断该年是否为闰年,并根据是否超过2月调整累加的天数。 - 输出...

    计算机职业辞职范本

    希望有帮助,因为有一天可以用到的。辞职函  xxxxx有限公司总经理室:  各位领导,我带着复杂的心情写这封次致信。由于您对我的能力的信任,使我得以加入公司,并且在短短的两年间获得了许多的机遇和挑战。经过...

    一个万年日历c程序

    3. **年月一号的算法**:暗示程序中有特定的算法用于计算某一年某一月第一天是星期几。 接下来,我们将基于以上信息对程序中的关键知识点进行详细解析。 #### 知识点详细解析 ##### 1. 模块化编程与函数调用 在...

    C语言课程设计报告————编制万年历

    在这个项目中,学生将学习到如何运用C语言创建一个能显示星期、年月日,并且能够随着系统时间变动自动更新的万年历。此外,设计过程中还需要实现修改功能,这要求编程者深入理解时间计算的规则,如闰年的判断和星期...

    GPS时间转化成标准时间格式.docx

    其中,x 是 GPS 时间,28800000 是北京时间的偏移值,86400000 是一天的秒数,31 是输出格式的参数,datenum(1970,1,1) 是 1970 年 1 月 1 日的日期编号。 这个公式可以将 GPS 时间转化成标准时间格式。例如,如果 ...

    C语言编程小实例

    在这个实例中,主要的目标是输入一个具体的日期(年月日),然后计算这一天是该年的第几天。实现这个功能的关键在于: - 首先需要确定该年是否为闰年,因为如果输入的日期在3月及以后,并且这一年是闰年的话,则需要...

    C语言实例100题C语言实例100题

    第四个示例中,程序通过输入年月日,计算这一天是一年中的第几天。此示例涉及到闰年的判断和不同月份天数的累加。通过`switch`语句快速定位到输入月份对应的天数累计,再加上当月天数,即可得到结果。此外,还特别...

    C语言万年历代码分享

    在 `leap()` 函数中,通过下面的公式计算出指定年月的第一天是星期几: ```c z = (x + (x - 1) / 4 - (x - 1) / 100 + (x - 1) / 400) % 7; ``` 这里 `x` 是年份,`z` 是星期几的数值表示(0代表星期天,1代表星期...

    js计算两个日期间的天数月的实例代码

    接着,使用一个循环来增加第一个日期直到它的年月与第二个日期相同。在这个过程中,如果月份超过12,则会将月份重置为1并增加年份,同时累加月数。然后,根据两个日期的天数进行计算,确定剩余的天数。如果第二个...

    c语言100例

    程序通过输入年月日来计算这一天是一年的第几天。首先通过switch-case语句计算出该月份之前的所有天数之和,再加上当月的天数得到总天数。此外,还特别考虑了闰年的情况,如果是一年中的2月之后且是闰年,则需要额外...

    C语言编程:一个日期推算的程序

    用户输入两个日期(年月日),程序将计算这两个日期之间相差的天数,并输出结果。 ### 二、关键概念解析 #### 1. 判断闰年函数 `judge` ```c #define judge(y) (y%4==0)&&(y%100!=0)||(y%400==0) ``` - **功能**...

    2012全国计算机等级考试上机考试与题库二级c语言.pdf

    文件中展示了如何使用switch语句结合case标签来处理年月日的计算问题,以及如何基于月份累加天数,进一步根据是否是闰年来确定当年是第几天。 ```c switch(month) { case 1: sum=0; break; ... case 12: sum=334...

    趣味数学篇----万年历的设计实训

    《万年历的设计实训》是一次以C语言为基础的编程实践,旨在提升学生的程序设计能力和对C语言的理解。设计目标主要包括四个部分:显示星期、显示年月日、日期的修改以及自动更新当前时间。这样的设计有助于学生理解...

Global site tag (gtag.js) - Google Analytics