我正在尝试使用Java中的日历类来获得一年中的季度。我得到如下的当前日期,并使用WEEK_OF_YEAR变量得到如下的一周,但低于输出对我来说没有多大意义,因为本周不是今年的第三周。
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
System.out.println("week of year: "+cal.WEEK_OF_YEAR);
output: 2014/02/17
week of year: 3
我想要做的是,我希望低于季度(目前Quarter1正在运行,下一季度是Quarter2)作为结果并在我的应用程序上使用它。
Quarter1 is from Week 1 to Week 12.
Quarter2 is from Week 13 to Week 24.
Quarter3 is from Week 25 to Week 37.
Quarter4 is from Week 38 to the end of the year.
请帮助我,让我知道如何找到上面提到的宿舍。
答案 0 :(得分:7)
Calendar.WEEK_OF_YEAR
是常数。你想要cal.get(Calendar.WEEK_OF_YEAR)
。
但是,你应该注意到“一年中的一周”并不像你想象的那么简单,作为一个概念。例如,它可以在1月1日为53,属于某些年份的前一周。你是否对一年中的第一季度比1月1日晚开始感到高兴?
(除非您真的需要使用一周/周/周/周的代表用于商业目的,年/月/日多更容易理解。)
如果你做需要在阅读这些警告后将一周中的一周翻译成一个季度,你可以使用:
public static int getQuarter(Calendar calendar) {
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
return weekOfYear < 13 ? 1
: weekOfYear < 25 ? 2
: weekOfYear < 38 ? 3
: 4;
}
答案 1 :(得分:0)
answer by Jon Skeet是正确的,应该被接受。获得该三元巫术的奖励积分。 : - )
如果您搜索StackOverflow,您将找到更常见的问题,即确定已经多次询问和回答的季度(以及月份和周数)。此外,搜索StackOverflow“java week”以查找有关处理时间跨度的有用说明。添加“joda”到那个搜索,你会更好。
请记住,时区非常关键,它定义了第一天定义的第一个时刻。
在one answer of mine中,我展示了如何使用Joda-Time获得第一个月,然后重复添加3个月,如果这是您对季度开始的定义。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime q1_2014 = new DateTime( 2014, 1, 1, 0, 0, 0, timeZone );
DateTime q2_2014 = q1_2014.plusMonths( 3 );
…
Joda-Time提供3个类来定义可能对您有用的时间跨度:句点,持续时间,尤其是Interval。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime yearStart = new DateTime( 2014, 1, 1, 0, 0, 0, timeZone );
Interval q1 = new Interval( yearStart, yearStart.plusMonths( 3 ) );
Interval q2 = new Interval( q1.getEnd(), q1.getEnd().plusMonths( 3 ) );
…
boolean isNowInQ1 = q1.contains( DateTime.now() );
Interval使用“半开”方法进行比较,这意味着开始是包容性的,结束是排他性的。这是一种合理且有用的时间跨度方法。
再次,搜索StackOveflow以获得更多讨论和许多示例。