2016-04-27 1 views
1

enumDayOfWeekとする関数を作成し、この日の値を別のものに使用したいとします。JavaのDayOfWeek値を設定するには?

私の問題は、返された値を設定(実際にはオーバーライド)できないことです。例えば

DayOfWeek.SUNDAY.getValue(); // return 7 

私は10からSUNDAYMONDAYを設定したいのように... はそれをやってどのような方法がありますか?

public enum MyDayOfWeek { 

    SUNDAY(0), MONDAY(1)....; 
    private int id; 
    MyDayOfWeek(int id) { 
    this.id = id; 
    } 

    public int getId() { return id;} 
} 
+0

ローカライズされた曜日が必要です。あなたが本当にやりたいことについてもっと教えてください。 SUNDAYを '0'に、MONDAYを '1'に設定したい*とはどういう意味ですか? Java Timeを使用していますか?ジョーダ? – Tunaki

+0

「DayOfWeek.SUNDAY」についてはどうですか?getValue()%7'? –

+0

@Tunaki - あなたが言ったように、私は週の日のための '新しい'値を定義することによって、現地化された週にしたいです。 SUNDAYの値は「0」で、「7」ではないことが重要です。これは後で私が書いているインフラのために私に役立つだろう。 私の関数はDayOfWeek列挙型を取得し、新しい曜日の値を定義する必要があります。 – nimrod

答えて

1

は単純に、int型のメンバーでint型、およびアクセサことを割り当て、コンストラクタを独自の列挙を定義します。

public static int getDayOrderNumber(DayOfWeek dow) 
{ 
    EnumMap<DayOfWeek, Integer> days = new EnumMap(DayOfWeek.class){{ 
     put(DayOfWeek.SUNDAY, 0); 
     put(DayOfWeek.MONDAY, 1); 
     ... 
    }}; 
    return days.get(dow); 
} 

のみいくつかのリファクタリングは、より適切な場所にマップを初期化しない:これは、あなたがこのような何かを書くことができますあなたの

0
public enum DayOfWeek{ 
    SUNDAY(0), 
    MONDAY(1), 
    TUESDAY(2); 
} 

DayofWeek day = Status.SUNDAY; System.out.println(day.name()); 

が順番にあなたの列挙型を配置してみてください。

0

を助けるかもしれません。

0

java.time.DayOfWeek

ジャワ8以降はビルトインような列挙、java.time.DayOfWeekを有しています。

ISO 8601標準では、週は月曜日から日曜日、1〜7の番号が付けられています。あなたは一般的に日曜日が最初のもので、米国で使用されるように、週たい数学を使用している場合は、米国のスタイル

にISO 8601スタイルから

int dayNumber = DayOfWeek.MONDAY.getValue() ; // 1 = Monday, 7 = Sunday. 

変換。このように、次いでモジュロ7プラス1

(DayOfWeek.SUNDAY.getValue() % 7) + 1 

を計算する:

System.out.println((DayOfWeek.SUNDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.MONDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.TUESDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.WEDNESDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.THURSDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.FRIDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.SATURDAY.getValue() % 7) + 1) ; 

あなたの質問には、矛盾したと明らかではないので、私はあなたが日曜日、土曜日は0-6である場合は、次にあなたの目標のわからない数学の上に使用しますが、やります1つを追加しないでください。

(DayOfWeek.SUNDAY.getValue() % 7) // Sunday = 0, Monday = 1 , … , Saturday = 6. 

java.util.Calendar私はレガシーDate/Calendarクラスを使用することをお勧めすることはないものの

定数が、あなたの情報のため、java.util.Calendarクラスはの日のためにint定数(ない列挙型)のシリーズを定義しますが1であり、次にCalendar.SATURDAYである週が7である週。 java.timeについて


java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなど、面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題