Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 本年度第二个星期一_Java - Fatal编程技术网

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

我需要在其中一个程序中计算今年的第二个星期一。java中的一种方法,它使用公历告诉您今年第二个星期一的日期。请建议。

将日历设置为一月的第一天

检索一周中的某一天

计算当月第一个星期一的日期


使用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 );