如何找到一年中某一周中某一日期的某一周,而不是星期一



假设我将周开始日设置为"星期五";在Java日历变量中。我需要找到和ISO周相似的年份的周数。有什么简单的方法可以找到周数吗?

定义"周">

由于您想要的不是标准ISO 8601周,因此必须指定的定义。

对于java.time.LocalDate对象,将从WeekFields对象获得的TemporalField传递给其get方法。👉您需要指定一周中的哪个天是第一个,并指定一年中第一周的最少天数。在那之后,你可以在一年中的一周内获得int

讽刺的是,做起来容易说起来难。继续阅读。

java.time.temporal.WeekFields

可怕的Calendar&GregorianCalendar类早在几年前就被JSR310中定义的现代java.time类所取代。

正如Ole V.V.所评论的,您可以使用WeekFields类来达到您的目的。使用LocalDate表示日期值(年、月和月中日(。致电WeekFields.of( DayOfWeek firstDayOfWeek , int minimalDaysInFirstWeek )

LocalDate
.of( 2022 , Month.SEPTEMBER , 28 )   // Returns a `LocalDate` object.
.get(
WeekFields
.of( DayOfWeek.FRIDAY , 4 )      // Returns a `WeekFields` object.
.weekOfYear()                    // Returns a `TemporalField` object.
)                                    // Returns an `int` integer number, the week-of-year.

请参阅IdeOne.com上运行的此代码。

weekOfYear:39


顺便说一句,对于使用标准ISO 8601周的读者,我建议将ThreeTen Extra库添加到您的项目中,用于其YearWeek类。

既然你标记了你的问题[groovy],这里有一个对我有用的groovy解决方案。让我知道它是否有帮助。

import static java.util.Calendar.*
Calendar calendar = Calendar.getInstance();
calendar.setMinimalDaysInFirstWeek(6);
calendar.setFirstDayOfWeek(Calendar.WEDNESDAY);
date=Date.parse("yyyy-MM-dd","2022-01-05")
/* Set Your date whose week number is needed*/
calendar.setTime(date);
/* Get Similar to ISO8601 week number */
print calendar.get(Calendar.WEEK_OF_YEAR); // Prints 1 
// All you need to set deviation as per your need, one solution can be by setting setMinimalDaysInFirstWeek as :-
// SUNDAY 3
// MONDAY 4
// TUESDAY 5
// WEDNESDAY 6
// THURSDAY 7
// FRIDAY 1
// SATURDAY 2

最新更新