【发布时间】:2014-01-21 08:50:34
【问题描述】:
我有一个 星期几 数字:2(如果星期从星期一开始,它应该与星期二匹配)。
有没有一种方法可以使用 Joda Time 获取 Java 中的日期名称? 在 javascript 中,使用 moment.js 很容易做到这一点:
moment().day(my number)
【问题讨论】:
我有一个 星期几 数字:2(如果星期从星期一开始,它应该与星期二匹配)。
有没有一种方法可以使用 Joda Time 获取 Java 中的日期名称? 在 javascript 中,使用 moment.js 很容易做到这一点:
moment().day(my number)
【问题讨论】:
至少这是可行的,虽然我认为它不是很好:
LocalDate date = new LocalDate();
date = date.withDayOfWeek(2);
System.out.println(DateTimeFormat.forPattern("EEEE").print(date));
不幸的是,Joda-Time 不提供星期几的枚举(java.time 提供)。我还没有很快在庞大的 api 中找到另一种方法。也许一些 Joda 专家知道更好的解决方案。
添加(感谢@BasilBourque):
LocalDate date = new LocalDate();
date = date.withDayOfWeek(2);
System.out.println(date.dayOfWeek().getAsText());
在java.time(JSR 310,Java 8 及更高版本)中,使用DayOfWeek enum。
int day = 2;
System.out.println( DayOfWeek.of(2).getDisplayName(TextStyle.FULL, Locale.ENGLISH) );
// Output: Tuesday
您可以直接使用特定的枚举实例,而不是像2 这样的magic number。 DayOfWeek 枚举为一周中的每一天提供一个实例,例如 DayOfWeek.TUESDAY。
System.out.println( DayOfWeek.TUESDAY.getDisplayName(TextStyle.FULL, Locale.ENGLISH) );
// Output: Tuesday
为了使其完整,这里是旧JDK的解决方案:
int day = 2;
DateFormatSymbols dfs = DateFormatSymbols.getInstance(Locale.ENGLISH);
System.out.println(dfs.getWeekdays()[day % 7 + 1]);
【讨论】:
你可以自己做
String[] dayNames = new String[]{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
String name = dayNames[day-1];
这甚至不需要任何库:)
【讨论】:
使用 Joda 你可以做到这一点:
DateTime curTime = new DateTime();
curTime.dayOfWeek().getAsText(Locale.ENGLISH);
将Locale 替换为您的区域设置。
应返回工作日名称,例如 Monday or Tuesday
【讨论】: