6

我想知道是否存在包含 Java 中所有工作日的现有枚举。我正在使用日历来处理时间逻辑,但我没有看到类似的东西(我可以自己创建它,但我宁愿使用现有的东西)。我还看到了threeten 项目,但它仍处于 alpha 阶段。由于包含星期几的枚举是如此微不足道,它在枚举文档中由 sun 显示,我在想某些东西可能已经存在。有任何想法吗 ?

4

3 回答 3

9

你想要new DateFormatSymbols().getWeekdays()

于 2013-08-20T08:50:59.677 回答
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 时没有枚举。

于 2013-08-20T07:57:01.403 回答
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.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 的试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等。

于 2016-08-17T20:44:59.467 回答