tl;博士
Boolean isWeekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ).contains ( Instant.ofEpochSecond( 1342162320L ).atZone( ZoneId.of( "Europe/Helsinki" ) ).getDayOfWeek() )
细节
其他答案是正确的,但使用过时的遗留类。请改用 java.time 类。
问题的周末部分很容易使用内置的 Java 库。您可以定义一组周末,例如美国的周六和周日。
涵盖假期需要某种外部库、Web 服务或数据库。假期的定义随着时间、管辖权和传统的不同而不同。我将忽略问题的那一部分;将Kennet 的答案视为一种可能的解决方案。
DayOfWeek
枚举标识一周的DayOfWeek
7 天中的每一天。您可以询问 aZonedDateTime
的DayOfWeek
.
首先解析您输入的数字。似乎是自 1970 年 UTC 第一时刻以来的整秒数。请注意L
末尾的 ,以使其成为long
整数。
Instant instant = Instant.ofEpochSecond( 1342162320L );
应用时区。
ZoneId zoneId = ZoneId.of( "Europe/Helsinki" );
ZonedDateTime zdt = instant.atZone( zoneId );
通过询问一周中的某一天是星期六还是星期日来测试周末。
DayOfWeek dow = zdt.getDayOfWeek();
Boolean isWeekend = ( dow.equals( DayOfWeek.SATURDAY ) || dow.equals( DayOfWeek.SUNDAY ) );
EnumSet
您还可以使用EnumSet
, 来实现快速执行和低内存使用。
Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
static final
如果它的定义在您的应用程序执行期间没有更改,则将其声明为常量。
static final Set<DayOfWeek> WEEKEND = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
当你得到一个DayOfWeek
对象时,看看它是否包含在 EnumSet 中,它是一个Set
接口的实现。
Boolean isWeekend = WEEKEND.contains( dow.getDayOfWeek() );
java.time
java.time框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到 java.time。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。
许多 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP中进一步适应Android。
ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。