我有一个原始 int 变量,可能的值从 1 到 7(实际上它是通过调用 org.joda.time.DateTime
对象上的 getDayOfWeek()
接收的,然后坚持)。
现在我需要获取星期几的字符串表示形式。我可以通过创建一个新的 DateTime
对象并将星期几设置为创建的对象来实现:
LocalDateTime.now().withDayOfWeek(dayOfWeek).dayOfWeek().getAsText();
问题是:我能否在不冗余创建 LocalDateTime
对象的情况下获得相同的字符串?
最佳答案
在不创建 LocalDateTime
的情况下实现你想要的例如,您可以使用 org.joda.time.chrono.ISOChronology
类获得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
新的 Java 日期/时间 API
Joda-Time 处于维护模式,正在被新的 API 取代,所以我不建议用它开始一个新项目。即使在 joda's website它说:“请注意,Joda-Time 被认为是一个基本“完成”的项目。没有计划进行重大增强。如果使用 Java SE 8,请迁移到 java.time (JSR-310)。”强>.
如果您使用的是 Java 8,请考虑使用 new java.time API .这更容易,less bugged and less error-prone than the old APIs .
如果您使用的是 Java <= 7,您可以使用 ThreeTen Backport ,Java 8 的新日期/时间类的一个很好的反向移植。对于 Android,有 ThreeTenABP (更多关于如何使用它的信息 here)。
下面的代码适用于两者。
唯一的区别是包名称(在 Java 8 中是 java.time
,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp
),但是类和方法名称是相同的。
for(DayOfWeek dow : DayOfWeek.values()) {
System.out.println(dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
}
这也会输出:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
您还可以获得 DayOfWeek
来自 int
值 - 从 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));
关于java - 是否有可能在 JodaTime 中将星期几作为仅具有星期几整数的字符串获取而不创建 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048006/