是否有可能在 JodaTime 中将星期几作为仅具有星期几整数的字符串获取而不创建 DateTime 对象
Is it possible in JodaTime to get day of week as a string having only integer number of a day of week without creation of DateTime object
我有一个原始的 int 变量,可能的值从 1 到 7(实际上它是通过对 org.joda.time.DateTime
对象调用 getDayOfWeek()
接收的,然后持久化)。
现在我需要获取星期几的字符串表示形式。我可以通过创建一个新的 DateTime
对象并将星期几设置为创建的对象来实现:
LocalDateTime.now().withDayOfWeek(dayOfWeek).dayOfWeek().getAsText();
问题是:我能否在不冗余创建 LocalDateTime
对象的情况下获得相同的字符串?
Joda-Time project is now in maintenance mode, so it is advised to migrate to the java.time classes. There is a simple and easy solution with java.time
for your scenario using DayOfWeek enum如下例所示:
int dayOfWeek = 1;
System.out.println(DayOfWeek.of(dayOfWeek)); // prints English all-caps, ex: MONDAY
调用 DayOfWeek::getDisplayName
生成一个字符串,其中包含您通过 Locale
对象指定的人类语言本地化的日期名称。
要在不创建 LocalDateTime
实例的情况下实现您想要的效果,您可以使用 org.joda.time.chrono.ISOChronology
class 来获得对应于星期几的 org.joda.time.DateTimeField
。
在下面的示例中,我使用的是 org.joda.time.DateTimeConstants
,它的值从星期一 (1
) 到星期日 (7
)。我还使用 java.util.Locale
来获取英文名称,但你可以使用任何你想要的 Locale
( 你问题中的代码 uses the system's default locale,在这种情况下你可以只使用 Locale.getDefault()
而不是 ):
DateTimeField dayOfWeek = ISOChronology.getInstance().dayOfWeek();
System.out.println(dayOfWeek.getAsText(DateTimeConstants.MONDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.TUESDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.WEDNESDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.THURSDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.FRIDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.SATURDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.SUNDAY, Locale.ENGLISH));
输出为:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
新建JavaDate/TimeAPI
Joda-Time 处于维护模式,正在被新的 APIs 取代,所以我不建议用它开始一个新项目。即使在 joda's website 它说:"Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).".
如果您正在使用 Java 8,请考虑使用 new java.time API. It's easier, less bugged and less error-prone than the old APIs.
如果您使用 Java <= 7,您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. And for Android, there's the ThreeTenABP (more on how to use it ).
下面的代码适用于两者。
唯一的区别是包名称(在 Java 8 中是 java.time
,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp
),但是 classes 和方法 names 相同。
for(DayOfWeek dow : DayOfWeek.values()) {
System.out.println(dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
}
这也会输出:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
您还可以从 int
值获取 DayOfWeek
- 从 1(星期一)到 7(星期日)- 使用 DayOfWeek.of
方法:
// 1 is Monday, 2 is Tuesday and so on, until 7 (Sunday)
System.out.println(DayOfWeek.of(1).getDisplayName(TextStyle.FULL, Locale.ENGLISH));
我有一个原始的 int 变量,可能的值从 1 到 7(实际上它是通过对 org.joda.time.DateTime
对象调用 getDayOfWeek()
接收的,然后持久化)。
现在我需要获取星期几的字符串表示形式。我可以通过创建一个新的 DateTime
对象并将星期几设置为创建的对象来实现:
LocalDateTime.now().withDayOfWeek(dayOfWeek).dayOfWeek().getAsText();
问题是:我能否在不冗余创建 LocalDateTime
对象的情况下获得相同的字符串?
Joda-Time project is now in maintenance mode, so it is advised to migrate to the java.time classes. There is a simple and easy solution with java.time
for your scenario using DayOfWeek enum如下例所示:
int dayOfWeek = 1;
System.out.println(DayOfWeek.of(dayOfWeek)); // prints English all-caps, ex: MONDAY
调用 DayOfWeek::getDisplayName
生成一个字符串,其中包含您通过 Locale
对象指定的人类语言本地化的日期名称。
要在不创建 LocalDateTime
实例的情况下实现您想要的效果,您可以使用 org.joda.time.chrono.ISOChronology
class 来获得对应于星期几的 org.joda.time.DateTimeField
。
在下面的示例中,我使用的是 org.joda.time.DateTimeConstants
,它的值从星期一 (1
) 到星期日 (7
)。我还使用 java.util.Locale
来获取英文名称,但你可以使用任何你想要的 Locale
( 你问题中的代码 uses the system's default locale,在这种情况下你可以只使用 Locale.getDefault()
而不是 ):
DateTimeField dayOfWeek = ISOChronology.getInstance().dayOfWeek();
System.out.println(dayOfWeek.getAsText(DateTimeConstants.MONDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.TUESDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.WEDNESDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.THURSDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.FRIDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.SATURDAY, Locale.ENGLISH));
System.out.println(dayOfWeek.getAsText(DateTimeConstants.SUNDAY, Locale.ENGLISH));
输出为:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
新建JavaDate/TimeAPI
Joda-Time 处于维护模式,正在被新的 APIs 取代,所以我不建议用它开始一个新项目。即使在 joda's website 它说:"Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).".
如果您正在使用 Java 8,请考虑使用 new java.time API. It's easier, less bugged and less error-prone than the old APIs.
如果您使用 Java <= 7,您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. And for Android, there's the ThreeTenABP (more on how to use it
下面的代码适用于两者。
唯一的区别是包名称(在 Java 8 中是 java.time
,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp
),但是 classes 和方法 names 相同。
for(DayOfWeek dow : DayOfWeek.values()) {
System.out.println(dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
}
这也会输出:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
您还可以从 int
值获取 DayOfWeek
- 从 1(星期一)到 7(星期日)- 使用 DayOfWeek.of
方法:
// 1 is Monday, 2 is Tuesday and so on, until 7 (Sunday)
System.out.println(DayOfWeek.of(1).getDisplayName(TextStyle.FULL, Locale.ENGLISH));