日历 DAY_OF_WEEK 返回错误的日期 - 始终是星期六

问题描述 投票:0回答:3

我是编程初学者,这是我对我的 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);

也许你注意到我的错误了?非常感谢!!

java android dayofweek
3个回答
6
投票

DAY_OF_WEEK
是一个枚举值,因此是常数。

您需要在

get(DAY_OF_WEEK);
参考上使用
calendar


2
投票

试试这个

Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK); 

了解更多详情。请参阅developers.android 页面上的this


0
投票

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 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.