我是编程初学者,这是我对我的 java android 项目的第一个问题。
我想创建一个包含 7 个项目的 Spinner。这些项目应显示最近 7 天。 嗯 - 今天是星期二,条目应该是这样的:
今天 - 周一 - 周日 - 周六 - .... - 周三
我的计算是正确的,日期是向下列出的。 但是当我记录“DAY_OF_WEEK”时,结果始终是 7(星期六),我不知道为什么。
这就是为什么我的物品被列为 -今天- -星期五- -星期四- ... 每天!
TimeZone/PhoneDate/PhoneTime ...一切似乎都很好
calendar = Calendar.getInstance();
// CalendarState for DayOfWeek: Sunday 1, Monday 2, ... Saturday 7
int currentDay = calendar.DAY_OF_WEEK;
logger.severe("CURRENT DAY OF WEEK: " + currentDay);
也许你注意到我的错误了?非常感谢!!
DAY_OF_WEEK
是一个枚举值,因此是常数。
您需要在
get(DAY_OF_WEEK);
参考上使用 calendar
。
试试这个
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);
了解更多详情。请参阅developers.android 页面上的this。
java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的遗留、java.util
日期时间 API。我强烈建议您开始使用 java.time
API
ZonedDateTime#now
返回指定时区的当前日期时间。然后,您可以使用 ZonedDateTime#getDayOfWeek
来获取表示星期几的枚举常量。 DayOfWeek#getValue
为您提供星期几 int
值。请注意,现代 API 使用 1 表示星期一,2 表示星期二,依此类推,我建议您坚持使用它。但是,如果您想使用 1 表示星期日,2 表示星期一,依此类推,您可以使用 ZonedDateTime#get(WeekFields.SUNDAY_START.dayOfWeek())
,如下例所示。
演示:
public class Main {
public static void main(String[] args) {
// Replace ZoneId.systemDefault() with the required ZoneId e.g. ZoneId.of("Europe/London)
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault());
int dow = zdt.getDayOfWeek().getValue(); // Monday is day-1
System.out.println(dow);
// In case you need Sunday as day-1
dow = zdt.get(WeekFields.SUNDAY_START.dayOfWeek()); // Sunday is day-1
System.out.println(dow);
}
}
从 Trail:日期时间了解有关现代日期时间 API 的更多信息。