`
远去的渡口
  • 浏览: 468465 次
  • 性别: 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,发现都是有问题的。
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics