我在自己的日期课程中管理一些日期。我想在我的日期创建一个这样的方法:
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 - 如果重要的话)
答案 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 );