获得正确的一周(Java日历)

时间:2013-12-18 18:09:52

标签: java calendar

我在自己的日期课程中管理一些日期。我想在我的日期创建一个这样的方法:

int getWeekdayIndex()

现在它看起来像这样:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.set(year, month+1, day); // data of this date
int weekdayIndex = cal.get(Calendar.DAY_OF_WEEK);
return weekdayIndex;

我知道DAY_OF_WEEK会返回1(星期日)到7(星期六),但如果我用

测试此方法

2014-01-06我得到索引5(假设为2)

2014-01-07我得到索引6(假设为3)

(我住在柏林UTC + 01:00 - 如果重要的话)

3 个答案:

答案 0 :(得分:2)

您应该使用:

cal.set(year, month-1, day); // data of this date

请注意month-1部分而不是month+1

假设月份的值为:

1 for Jan
2 for Feb
3 for Mar
...

答案 1 :(得分:1)

您的方案中month是什么?如果“1月”为0,则在调用set method时添加1。但Java中的月份是零基础,所以你设置“二月”,2014年2月6日是星期四(5),2014年2月7日是星期五(6)。

  

month - 用于设置MONTH日历字段的值。月值基于0。例如,1月份为0。

尝试更改

cal.set(year, month+1, day);

cal.set(year, month, day); 

答案 2 :(得分:0)

仅供参考,Joda-Time 2.3有方便的方法进行此类工作。

DateTime类提供了dayOfWeek方法。从那里你可以得到当天的本地化名称,以及你的需要,数字。 Joda-Time使用国际标准ISO 8601计算天数,其中星期一为1,星期日为7。

示例代码......

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;

DateTimeZone berlinTimeZone = DateTimeZone.forID( "Europe/Berlin" );

DateTime dateTime = new DateTime( 2013, DateTimeConstants.DECEMBER, 13, 14, 15, 16, berlinTimeZone );
String dayOfWeekAsText = dateTime.dayOfWeek().getAsText( Locale.GERMANY );
int dayOfWeekAsNumber = dateTime.dayOfWeek().get();

System.out.println( "dayOfWeekAsText: " + dayOfWeekAsText );
System.out.println( "dayOfWeekAsNumber: " + dayOfWeekAsNumber );

跑步时......

dayOfWeekAsText: Freitag
dayOfWeekAsNumber: 5

容易跳到另一个月。

DateTime previousMonthDateTime = dateTime.minusMonths( 1 );
DateTime nextMonthDateTime = dateTime.plusMonths( 1 );