在 Java 中根据周查找季度

问题描述 投票:0回答:3

我正在尝试使用 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

我想做的是,我想要以下季度(当前第 1 季度正在运行,下个季度是第 2 季度)作为结果,并在我的应用程序中使用它。

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.

请帮我解决这个问题,并让我知道如何找到上述宿舍。

java date datetime week-number
3个回答
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; }

Jon Skeet

0
投票

0
投票

现在在 Java 8+ 中使用继承了 Joda-Time

框架的

java.time 类。 你说:

获取当前日期

确定今天的日期需要时区。对于任何给定时刻,全球各地的日期都会因时区而异。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ; LocalDate today = LocalDate.now( z ) ;

定义

季度 您需要定义

季度的含义。定义因文化和行业而异。 ISO 8601

有一个国际标准定义:

ISO 8601

。在此标准中,第 1 周为日历年的第一个星期四,完整的周为 7 天,每年恰好有 52 或 53 周。因此,第一周/最后一周可能有上一个/下一个日历年的日期。

三十额外

要使用季度,我建议将

ThreeTen-Extra

库添加到您的项目中。该项目扩展了 java.time 的功能。然后您可以访问 YearQuarter

YearWeek 类。这些类使用 ISO 8601 定义。
你说:

获取一年中的季度

您可以向 YearQuarter 类询问任何日期的季度。

YearQuarter yq = YearQuarter.from( today ) ;

或更直接地,跳过
LocalDate
获取当前季度。

YearQuarter yq = YearQuarter.now( z ) ;


© www.soinside.com 2019 - 2024. All rights reserved.