我想知道是否存在包含Java中所有工作日的现有枚举。我正在使用Calendar来处理时间逻辑,但我没有看到这样的东西(我可以自己创建它,但我宁愿使用现有的东西)。我也看到了threeten project,但它仍处于alpha状态。由于枚举文档中包含太阳的枚举是如此微不足道,因此我认为某些事情可能已经存在。有什么想法吗?
答案 0 :(得分:8)
答案 1 :(得分:2)
在日历类中,有:
/**
* 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时没有。
答案 2 :(得分:2)
麻烦的旧日期时间类如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 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和&amp; java.text.SimpleDateFormat
。
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP。
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。