假设我将周开始日设置为"星期五";在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