8

String月曜日など、スペルアウトされた曜日の を受け取りました。ここで、 で使用される、その日の定数整数表現を取得したいと考えていますjava.util.Calendar

私は本当にif(day.equalsIgnoreCase("Monday")){...}else if(...){...}自分でやらなければならないのですか?きちんとした方法はありますか?を掘り下げてSimpleDateFormatと混ぜるとCalendar、醜い if-else-to-infitity ステートメントを入力するのとほぼ同じ数の行が生成されます。

4

10 に答える 10

11

あなたはそれを使用SimpleDateFormatして、特定の日を解析することもできますLocale

public class Main {

    private static int parseDayOfWeek(String day, Locale locale)
            throws ParseException {
        SimpleDateFormat dayFormat = new SimpleDateFormat("E", locale);
        Date date = dayFormat.parse(day);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        return dayOfWeek;
    }

    public static void main(String[] args) throws ParseException {
        int dayOfWeek = parseDayOfWeek("Sunday", Locale.US);
        System.out.println(dayOfWeek);

        dayOfWeek = parseDayOfWeek("Tue", Locale.US);
        System.out.println(dayOfWeek);

        dayOfWeek = parseDayOfWeek("Sonntag", Locale.GERMANY);
        System.out.println(dayOfWeek);
    }

}
于 2013-08-14T13:01:03.937 に答える
1

次のようなヘルパー メソッドの使用を検討してください

public static int getDayOfWeekAsInt(String day) {
    if (day == null) {
        return -1;
    }
    switch (day.toLowerCase()) {
        case "monday":
            return Calendar.MONDAY;
        case "tuesday":
            return Calendar.TUESDAY;
        case "wednesday":
            return Calendar.WEDNESDAY;
        case "thursday":
            return Calendar.THURSDAY;
        case "friday":
            return Calendar.FRIDAY;
        case "saturday":
            return Calendar.SATURDAY;
        case "sunday":
            return Calendar.SUNDAY;
        default: 
            return -1;
    }
}

switch-caseStrings の使用は、Java 7 以降でのみサポートされていることに注意してください。

于 2013-08-14T13:07:45.470 に答える
1

次のようなことができます。

    private static String getDayOfWeek(final Calendar calendar){
    assert calendar != null;
    final String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    return days[calendar.get(Calendar.DAY_OF_WEEK)-1];
}

ただし、メソッドが呼び出されるたびに曜日を宣言し続ける必要がないように、曜日を宣言することをお勧めします。

逆に、次のようなものがあります。

    private static int getDayOfWeek(final String day){
    assert day != null;
    final String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    for(int i = 0; i < days.length; i++)
        if(days[i].equalsIgnoreCase(day))
            return i+1;
    return -1;
}
于 2013-08-14T13:00:32.240 に答える
0

Map を宣言しない理由:

Map<String, Integer> daysMap = new HashMap<String, Integer>();

daysMap.add("monday", 0);
daysMap.add("tuesday", 1);
//etc.

次に、検索する必要がある場合:

int dayId = daysMap.get(day.toLowerCase());

これはあなたが必要とすることをするはずです。ファイル/データベースなどからデータをロードすることもできます。

于 2013-08-14T13:04:00.217 に答える
0

一度欲しいものを初期化してみませんか?

private static final Map<String, Integer> weekDays;
static
{
    weekDays= new HashMap<String, Integer>();
    weekDays.put("Monday", Calendar.MONDAY);
    weekDays.put("Tuesday", Calendar.TUESDAY);
    // etc
}
于 2013-08-14T13:00:56.837 に答える