[英]Java's Calendar.DAY_OF_WEEK returns incorrect value
今天是星期一(應該返回 2),但返回 7(星期六)。 我錯過了什么?
int today = Calendar.DAY_OF_WEEK;
System.out.println(today);
代替
int today = Calendar.DAY_OF_WEEK;
你必須使用
Calendar cal = Calendar.getInstance();
int today = cal.get(Calendar.DAY_OF_WEEK);
以獲得價值。
按照您的方式,您只能打印常量Calendar.DAY_OF_WEEK
的值,而不會獲得Calendar
對象當天的實際值。
當你使用
int today = Calendar.DAY_OF_WEEK;
這是給你的……
/**
* Field number for <code>get</code> and <code>set</code> indicating the day
* of the week. This field takes values <code>SUNDAY</code>,
* <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
* <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
*
* @see #SUNDAY
* @see #MONDAY
* @see #TUESDAY
* @see #WEDNESDAY
* @see #THURSDAY
* @see #FRIDAY
* @see #SATURDAY
*/
public final static int DAY_OF_WEEK = 7;
遺留日期時間 API( java.util
日期時間類型及其格式類型SimpleDateFormat
)已過時且容易出錯。 建議完全停止使用它並切換到java.time
, 現代日期時間 API * 。
使用現代 API 的解決方案:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// To use JVM's timezone, simply remove the argument or use
// ZoneId.systemDefault() as the argument
LocalDate date = LocalDate.now(ZoneId.of("America/New_York"));
// As enum
DayOfWeek dw = date.getDayOfWeek();
System.out.println(dw); // Value
System.out.println(dw.ordinal()); // Ordinal
// As String
String dayName = dw.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println(dayName);
// As int
int day = dw.getValue();
System.out.println(day);
}
}
輸出:
SATURDAY
5
Saturday
6
從Trail: Date Time 中了解有關現代日期時間 API * 的更多信息。
* 出於任何原因,如果您必須堅持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它將大部分java.time功能向后移植到 Java 6 和 7。如果您正在為 Android 項目和您的 Android API 工作級別仍然不符合 Java-8,請檢查 通過 desugaring和How to use ThreeTenABP in Android Project 可用的 Java 8+ APIs 。
使用Calendar.DAY_OF_WEEK
將返回用於get
方法的字段編號(在這種情況下為 7)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.