Java 本年度第二个星期一
我需要在其中一个程序中计算今年的第二个星期一。java中的一种方法,它使用公历告诉您今年第二个星期一的日期。请建议。将日历设置为一月的第一天 检索一周中的某一天 计算当月第一个星期一的日期Java 本年度第二个星期一,java,Java,我需要在其中一个程序中计算今年的第二个星期一。java中的一种方法,它使用公历告诉您今年第二个星期一的日期。请建议。将日历设置为一月的第一天 检索一周中的某一天 计算当月第一个星期一的日期 使用calendar.Add()方法添加7天。你将得到第二个星期一。你可以写这样的东西 int year = 2016; Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set
使用calendar.Add()方法添加7天。你将得到第二个星期一。你可以写这样的东西
int year = 2016;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.YEAR, year);
return cal.get(Calendar.DATE);
tl;博士
避免遗留日期时间类
该类现在是遗留类,特别是被java.time类取代。避免使用旧的遗留日期时间类,因为它们设计糟糕、容易混淆且麻烦
LocalDate
对于仅日期值,请使用。该类表示一个仅限日期的值,不包含一天中的时间和时区
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”
TemporalAdjuster
该接口为类提供了操作日期时间值的功能。(注意复数“s”)类提供了几个方便的实现
我们需要一个调整器来获得当年的第一天,另一个调整器来获得当月的第二个星期一
LocalDate firstOfYear = today.with( TemporalAdjusters.firstDayOfYear() );
LocalDate secondMondayOfYear = firstOfYear.with( TemporalAdjuster.dayOfWeekInMonth( 2 , DayOfWeek.MONDAY ) );
gregorianalendar
如果您确实需要一个gregoriacalendar
,您可以通过调用添加到旧类中的新方法进行转换。我假设您希望将一天中的时间设置为一天中的第一个时刻。第一个时刻并不总是00:00:00
,所以让java.time来确定一天中的时间
ZonedDateTime zdt = secondMondayOfYear.atStartOfDay( z );
GregorianCalendar gc = java.util.GregorianCalendar.from( zdt );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到java.time 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门针对Android采用了Three Ten Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。到目前为止您尝试了哪些?您可以尝试使用
日历
类,将月份设置为一月(因为一年中的第二个星期一肯定是一月),并获取一周中第一天的日期。它不应该是月中的周,而不是月中的周中的日,将其设置为2,以将其设置为2016年1月的第二周的星期一吗?如果该月的第一周不是从星期一开始,使用WEEK\u OF\u MONTH
设置为2,仍然会给出该月的第一个星期一。哦,你说得对。就在那里被弄糊涂了…不总是正确的。有周编号系统可以在1月1日之前的第1周开始。
LocalDate firstOfYear = today.with( TemporalAdjusters.firstDayOfYear() );
LocalDate secondMondayOfYear = firstOfYear.with( TemporalAdjuster.dayOfWeekInMonth( 2 , DayOfWeek.MONDAY ) );
ZonedDateTime zdt = secondMondayOfYear.atStartOfDay( z );
GregorianCalendar gc = java.util.GregorianCalendar.from( zdt );