Java 在JodaTime中,是否可以在不创建DateTime对象的情况下,将星期几作为只包含星期几整数的字符串获取

Java 在JodaTime中,是否可以在不创建DateTime对象的情况下,将星期几作为只包含星期几整数的字符串获取,java,jodatime,date-formatting,Java,Jodatime,Date Formatting,我有一个可能值为1到7的基本int变量(实际上它是从调用org.joda.time.DateTime对象上的getDayOfWeek()接收的,然后被持久化) 现在我需要得到一周中这一天的字符串表示。我可以通过创建一个新的DateTime对象并将每周的那一天设置为created对象来实现: LocalDateTime.now().withDayOfWeek(dayOfWeek).dayOfWeek().getAsText(); 问题是:我能否在不冗余创建LocalDateTime对象的情况下获

我有一个可能值为1到7的基本int变量(实际上它是从调用
org.joda.time.DateTime
对象上的
getDayOfWeek()
接收的,然后被持久化)

现在我需要得到一周中这一天的字符串表示。我可以通过创建一个新的
DateTime
对象并将每周的那一天设置为created对象来实现:

LocalDateTime.now().withDayOfWeek(dayOfWeek).dayOfWeek().getAsText();
问题是:我能否在不冗余创建
LocalDateTime
对象的情况下获得相同的字符串?

项目现在处于维护模式,因此建议迁移到类。使用
java.time
为您的场景提供了一个简单易行的解决方案,如下例所示:

int dayOfWeek = 1;
System.out.println(DayOfWeek.of(dayOfWeek)); // prints English all-caps, ex: MONDAY

调用以生成通过
Locale
对象指定的人类语言本地化的当天名称字符串

要在不创建
LocalDateTime
实例的情况下实现所需,可以使用
org.joda.time.chrono.ISOChronology
类获取与星期几对应的
org.joda.time.DateTimeField

在下面的示例中,我使用的是
org.joda.time.DateTimeConstants
,它的值从周一(
1
)到周日(
7
)。我也在使用
java.util.Locale
获取英文名称,但是您可以使用您想要的任何
Locale
问题中的代码,在本例中,您可以使用
Locale.getDefault()
):

输出为:

星期一
星期二
星期三
星期四
星期五
星期六
星期天


新的Java日期/时间API Joda Time处于维护模式,正在被新的API所取代,因此我不建议使用它启动新项目。甚至在文章中也提到:“请注意,Joda Time被认为是一个基本上“完成”的项目。没有计划进行重大的增强。如果使用Java SE 8,请迁移到Java.Time(JSR-310)。”

如果使用<强> java 8 < />,请考虑使用这更容易


如果您使用的是Java,则是。这些值以
Monday
作为
1
开始,以
Sunday
作为
7
结束。另见。对不起,没有更好的办法了。顺便说一句,我在2014年的研究中发现了这一点。如果你只需要英语,最好的解决方法可能是持有一个静态字符串数组(“星期一”到“星期天”),然后按数组索引查找字符串。@MenoHochschild我也认为这是不可能的,但我确实找到了一种方法(检查下面的答案)。无论如何,如果您不关心区域设置敏感的解决方案,那么字符串数组可能更简单。谢谢您的宝贵添加@Basil BourqueHugo,谢谢!我不知道这个backport,这个项目完全是在Android上进行的。我将尝试切换到Three Ten,直到现在还不太晚。我已经将项目迁移到Three Ten并更新了所有单元测试。一切都很好。@dpg太好了,完全值得!最终迁移到Java8会容易得多,因为它只需要在导入中重命名一个包。
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));
for(DayOfWeek dow : DayOfWeek.values()) {
    System.out.println(dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
}
// 1 is Monday, 2 is Tuesday and so on, until 7 (Sunday)
System.out.println(DayOfWeek.of(1).getDisplayName(TextStyle.FULL, Locale.ENGLISH));