java - 是否有可能在 JodaTime 中将星期几作为仅具有星期几整数的字符串获取而不创建 DateTime 对象

标签 java jodatime date-formatting

我有一个原始 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/

相关文章:

java joda-time 获取日期时间

python - 如何更改 Pandas 数据框中的日期格式?

sqlite 时间戳格式化

java - Jackson版本不兼容?

java - 时间在 JHipster

java - 如何排序忽略大写的数组?

java - Collections.sort(<StringDate>, new Comparator) 未正确比较日期

java - 使用 Java 确定 Derby 数据库架构版本?

java - 使用Java划分时间

datetime - 根据 UTC 获取 future 事件的本地时间