簡體   English   中英

自定義gregoriancalendar月

[英]Custom gregoriancalendar month

如何根據用戶的輸入實例化日歷? 我試過了:

Calendar cal = new GregorianCalendar(2011, Calendar.t.getMonth(month), 1);

但沒有做到這一點。

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Test t = new Test();
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter a month: ");
        String month = sc.next();

        Calendar cal = new GregorianCalendar(2011, Calendar.JANUARY, 1);

        int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.print("There are "+days+" days in "+month+".");
    }
    private String getMonth(String month){
        return month;
    }
}

或者更實際的方法呢? 謝謝。

您需要在月份中添加一個,因為它從0開始而不是1:

int month = sc.nextInt();
Calendar cal = new GregorianCalendar(2011, month + 1, 1);

或者,如果您希望用戶插入字符串而不是數字值,則可以執行以下操作:

String month = sc.nextLine();
int iMonth = -1;
if(month.equalsIgnoreCase("January"))  iMonth = 0;
else if(month.equalsIgnoreCase("February")) iMonth = 1;
// and so on ...
Calendar cal = new GregorianCalendar(2011, iMonth, 1);

使用Joda Time而不是本機Java GregorianCalendar。 好多了!

 // From Joda Time documentatio
 // setup date object for midday on Christmas 2004
 Chronology chrono = GregorianChronology.getInstance();
 DateTime dt = new DateTime(2004, 12, 25, 12, 0, 0, 0, chrono);

對於每個枚舉,Java都有一個valueOf(String)靜態函數,它將String轉換為適當的枚舉。 遺憾的是,Calendar類的常量(如Calendar.JANUARY)是常量而不是枚舉。 最好的方法是構建一個名為months的枚舉,將這些月份連接到Calendar常量,然后在將用戶的輸入置為大寫之后,使用valueOf函數。

使用代碼:

public enum Months {

    JANUARY (0),
    FEBRUARY (1),
    MARS (2) // and so on

    private int value;

    test(int value){
        this.value = value;
    }
}

在您的課堂上,有一個像這樣的函數:

private int monthFromString(String userInputMonth) {
   return Months.valueOf(userInputMonth);
}

GregorianCalendar不是要直接實例化(讀取javadocs),而是使用Calendar.getInstance() ,並使用set(int...)方法賦值。

暫無
暫無

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

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