Java计算周数,2月第一周为1周?

时间:2015-02-11 13:17:51

标签: java calendar week-number java.util.date

我正在尝试计算周数,其中周数的开头必须从2月的第一周开始。例如。 2015年2月2日 - 2月8日周数必须为1.请帮助我,因为我是这个环境的新手,我可以计算从1月1日开始的周数。

要添加更多上下文,我尝试在2月开始的第1周实现java中的广播日历。

2 个答案:

答案 0 :(得分:1)

java.time

LocalDate类表示没有时间且没有时区的仅限日期的值。

将所需日期指定为锚定日期,即我们计算周数的日期。您需要序数周数,因此请添加一个以避免一周编号为零。

ChronoUnit enum提供between方法来计算已用时间。

LocalDate anchor = LocalDate.of( 2015 , Month.FEBRUARY , 2 );

LocalDate feb5 = LocalDate.of( 2015 , Month.FEBRUARY , 5 );
LocalDate feb8 = LocalDate.of( 2015 , Month.FEBRUARY , 8 );
LocalDate feb9 = LocalDate.of( 2015 , Month.FEBRUARY , 9 );

System.out.println( feb5 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb5 ) + 1 ) );
System.out.println( feb8 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb8 ) + 1 ) );
System.out.println( feb9 + " is in week # " + ( ChronoUnit.WEEKS.between( anchor , feb9 ) + 1 ) );

请参阅此code run live at IdeOne.com

  

2015-02-05在第1周

     

2015-02-08是第1周

     

2015-02-09在第2周​​

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:0)

所以只需使用

Calendar c = Calendar.getInstance();
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
c.setTime( sdf.parse("2/2/2015"));
out.println( c.get( Calendar.WEEK_OF_YEAR ));

获取2月2日的周数,并将其抵消1月1日之间的周数。所以

c.get( Calendar.WEEK_OF_YEAR )) - 4; 

或许多周都在它面前。