如何在Java中获取给定周数的第一天

让我解释一下自己。 通过了解周数和日期年份:

Date curr = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(curr); int nweek = cal.WEEK_OF_YEAR; int year = cal.YEAR; 

但现在我不知道如何获得该周第一天的日期。 我一直在寻找日历,日期,日期格式,但没有什么可能有用……

有什么建议吗? (在Java工作)

这些字段不返回值。 这些是常量 ,用于标识Calendar对象中可以获取/设置/添加的字段。 要实现您的目标,首先需要获取Calendar ,清除它并设置已知值。 它会自动将日期设置为该周的第一天。

 // We know week number and year. int week = 3; int year = 2010; // Get calendar, clear it and set week number and year. Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.WEEK_OF_YEAR, week); calendar.set(Calendar.YEAR, year); // Now get the first day of week. Date date = calendar.getTime(); 

请学习阅读 javadocs以学习如何使用类/方法/字段,不要试图在IDE中随机戳;)

也就是说, java.util.Datejava.util.Calendar是史诗般的失败 。 如果可以,请考虑切换到Joda Time 。

尝试这个:

 public static Calendar setWeekStart(Calendar calendar) { while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { calendar.add(Calendar.DATE, -1); } setDayStart(calendar); // method which sets H:M:S:ms to 0 return calendar; } 

我没有在java中做过很多日期的东西,但解决方案可能是:

 cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_WEEK)); 

逻辑:

获取当天的日期并从当前日期减去它(可能需要-1,具体取决于您需要星期一是一周的第一天还是星期日)

还有另一种方式……

  GregorianCalendar cal = new GregorianCalendar(); cal.clearTime(); Integer correction = 1-cal.get(GregorianCalendar.DAY_OF_WEEK) cal.add(Calendar.DATE, correction); 

cal现在是一周的第一天

1-cal.get(GregorianCalendar.DAY_OF_WEEK)

星期日(我的语言环境中的第一天)评估为1-1,星期一评估为1-2,因此这将为您提供将时钟倒回到星期日所需的更正

请谨慎对待, calendar.get(Calendar.WEEK_OF_YEAR)如果是12月底则返回1,并且已经是明年结束的一周。

运用

 // cal2.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR)); // cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 

将cal2日期设置为例如2009年底的29/12/2010 !!

我用过这个:

 cal2.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR)); //to round at the start of day cal2.set(Calendar.YEAR, cal.get(Calendar.YEAR)); cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //to round at the start of week 

我还要确保我的日历中的周数,无论他们在哪个地方,都在星期一开始:

 cal.setFirstDayOfWeek(Calendar.MONDAY); cal2.setFirstDayOfWeek(Calendar.MONDAY); 

尝试格里高利历法算法:

 public int getFirstDay(int m, int year) { int k=1; int c, y, w, M=0; if(m>2 && m<=12) M=m-2; else if(m>0 && M<=2) { M=m+10; year-=1; } c=year/100; y=year%100; w=(int)((k+(Math.floor(2.6*M - 0.2))-2*c+y+(Math.floor(y/4))+(Math.floor(c/4)))%7);//a fantastic formula if(w<0) w+=7; return w;//thus the day of the week is obtained! } 

这里有一些快速而脏的代码。 此代码创建一个日历对象,其中包含当天的日期,计算当前的星期几,并减去星期几,以便您在第一天(星期日)。 虽然我正在使用DAY_OF_YEAR,但它经历了多年的罚款(在1/2/10它将返回12/27/09,这是正确的)。

 import java.text.Format; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DOW { public static void main(String[] args) { DOW dow = new DOW(); dow.doIt(); System.exit(0); } private void doIt() { Date curr = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(curr); int currentDOW = cal.get(Calendar.DAY_OF_WEEK); cal.add(Calendar.DAY_OF_YEAR, (currentDOW * -1)+1); Format formatter = new SimpleDateFormat("MM/dd/yy"); System.out.println("First day of week="+formatter.format(cal.getTime())); } }