簡體   English   中英

Java Calendar.DAY_OF_WEEK 給出錯誤的一天

[英]Java Calendar.DAY_OF_WEEK gives wrong day

下面的代碼有什么問題? 它為一年中的任何日期提供錯誤的日期。

import java.util.Scanner;
import java.util.Calendar;
public class Solution {
    public static String getDay(String d, String m, String y) {

        String[] days = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
        Calendar c = Calendar.getInstance();
        c.set(Integer.parseInt(y), Integer.parseInt(m), Integer.parseInt(d)); 
        return days[c.get(Calendar.DAY_OF_WEEK) - 1]; 
    }
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String m = in.next();
        String d = in.next();
        String y = in.next();

        System.out.println(getDay(d, m, y));
    }
}

請參閱Calendar類的文檔: https : //docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#set-int-int-int-

月份的值是 0 索引的,因此如果您提供3作為月份值,它會被解釋為“四月”。

Scanner讀取int值而不是字符串是最簡單的:

    int m = in.nextInt();
    int d = in.nextInt();
    int y = in.nextInt();

    System.out.println(LocalDate.of(y, m, d).getDayOfWeek());

當我喂5 4 2018 (今天的日期)時,我得到FRIDAY ,這是正確的。

如果必須使用字符串:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/u");

    String m = in.next();
    String d = in.next();
    String y = in.next();

    System.out.println(LocalDate.parse(m + '/' + d + '/' + y, dateFormatter).getDayOfWeek());

您使用的Calendar類早已過時,設計不佳,有時使用起來很麻煩。 相反,我推薦java.time ,現代 Java 日期和時間 API。 它好多了。 對於一件小事,它以與人類相同的方式計算一年中的幾個月。

此外,星期幾的名稱是內置的,所以不要重新發明輪子。 您的字符串與java.time DayOfWeek枚舉的值的名稱一致,因此只需打印它們即可獲得您想要的字符串。 如果您不想要全部大寫或想要其他語言的日期名稱,請使用DayOfWeek.getDisplayNameDateTimeFormatter

鏈接: Oracle 教程:解釋如何使用java.time日期時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM