我想知道是否存在包含 Java 中所有工作日的现有枚举。我正在使用日历来处理时间逻辑,但我没有看到类似的东西(我可以自己创建它,但我宁愿使用现有的东西)。我还看到了threeten 项目,但它仍处于 alpha 阶段。由于包含星期几的枚举是如此微不足道,它在枚举文档中由 sun 显示,我在想某些东西可能已经存在。有任何想法吗 ?
3 回答
在日历类中,有:
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Sunday.
*/
public final static int SUNDAY = 1;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Monday.
*/
public final static int MONDAY = 2;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Tuesday.
*/
public final static int TUESDAY = 3;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Wednesday.
*/
public final static int WEDNESDAY = 4;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Thursday.
*/
public final static int THURSDAY = 5;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Friday.
*/
public final static int FRIDAY = 6;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Saturday.
*/
public final static int SATURDAY = 7;
(来源:java.util.Calendar)
不是枚举,因为在 JDK 1.1 中引入 Calendar 时没有枚举。
麻烦的旧日期时间类,例如java.util.Calendar
现在是遗留的,被 java.time 类取代。
java.time.DayOfWeek
枚举
Java 现在包括java.time.DayOfWeek
枚举。
传递此枚举的对象,而不仅仅是整数 1-7,以使您的代码更具自记录性,提供类型安全性并确保一系列有效值。
invoices.printReportForDayOfWeek( DayOfWeek.MONDAY );
根据 ISO 8601 标准,周一至周日的编号为 1-7。
通过调用获取当天的本地化名称getDisplayName
。
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; // Or Locale.US, etc.
要跟踪一周中的多天,请使用EnumSet
(的实现Set
)或EnumMap
(的实现Map
)。
Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ) ;
…
Boolean todayIsWeekend = weekend.contains( LocalDate.now( ZoneId.of( "America/Montreal" ) ).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 的试验场。您可能会在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
等。