-4

現在の年の合計週数を返すスタックオーバーフローのコードの下にありますが、2014 と 2016 では機能しないハードコーディングされています。現在の年の合計週数を動的に取得するにはどうすればよいですか???

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2015);
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DAY_OF_MONTH, 31);

int ordinalDay = cal.get(Calendar.DAY_OF_YEAR);
int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; // Sunday = 0
int numberOfWeeks = (ordinalDay - weekDay + 10) / 7;
System.out.println(numberOfWeeks);

私はこれが好きで、それが現在の方法であることを確認しましたか?

     Calendar cal = Calendar.getInstance();
     int year = cal.get(Calendar.YEAR);
     cal.set(Calendar.YEAR, year);
     cal.set(Calendar.MONTH, Calendar.DECEMBER);
     cal.set(Calendar.DAY_OF_MONTH, 31);

     int ordinalDay = cal.get(Calendar.DAY_OF_YEAR);
     int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; // Sunday = 0
     int numberOfWeeks = (ordinalDay - weekDay + 10) / 7;
     System.out.println(numberOfWeeks);
4

7 に答える 7

0

次のようなものを使用できます

private Calendar getCalendar(int year, int month, int day) {
    Calendar calendar = Calendar.getInstance(Locale.GERMAN);
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.set(year, month, day);
    return calendar;
}

private int getTotalWeeksInYear(int year) {
    return getCalendar(year, Calendar.DECEMBER, 31).get(Calendar.WEEK_OF_YEAR); 
}

年の週の定義はローカルに依存することに注意してください。これは、異なるロケールでは get(Calendar.WEEK_OF_YEAR) の戻り値が異なることを意味します。たとえば、DIN 1355-1 / ISO 8601 による Locale.GERMAN では、年の最初の週は、新しい年の 4 日以上を含む週です。Locale.US の場合、年の最初の週は 1 月 1 日が属する週です。

于 2014-07-18T09:18:18.490 に答える
0

私はDatePickerFragment、そのonDateSet関数を持っています

public void onDateSet(DatePicker view, int year, int month, int day) {
    ((Main) getActivity()).setWeek(year, month, day);
} 

年、月、日のみを返します。そのため、週を取得するには次のことを行う必要があります。

public void getWeek(int year, int month, int day){

        final Calendar c = Calendar.getInstance();
        c.set(year, month, day);
        int week = c.get(Calendar.WEEK_OF_YEAR);            

}
于 2013-08-27T20:58:15.783 に答える
0

最速の方法は次のとおりです。週の数は所定の基準で決定されるため、出身地に応じてカレンダーを適切に設定することが非常に重要です。たとえば、Europ では ISO 8061 です。1 年の 1 週間は 01.01.RRRR が木曜日以降で始まり、週は月曜日から始まることを意味します。

GregorianCalendar gregorianCalendar = new GregorianCalendar(year,12,31);
gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY); // week beginn from Monday
gregorianCalendar.setMinimalDaysInFirstWeek(4); // 1week mininum from Thursday
int totalWeeks = gregorianCalendar.getMaximum(Calendar.WEEK_OF_YEAR);
于 2015-08-11T21:42:32.797 に答える
0

次のようにCalendar.getActualMaximum(int)メソッドを使用して、現在の年の合計週数を取得できます。

int totalNumberOfWeeks = Calendar.getInstance().getActualMaximum(Calendar.WEEK_OF_YEAR);

単純。

于 2017-09-07T21:17:51.220 に答える
0

このメソッドで現在の年を使用するだけです:

int year = Calendar.getInstance().get(Calendar.YEAR);
cal.set(Calendar.YEAR, year);

残りはあなたの例と同じままにしておきます。

于 2013-08-26T07:04:21.263 に答える