-4

我在stackoverflow上得到了下面的代码,它返回当年的总周数,但它是硬编码的,在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

3

使用下面的代码

Calendar mCalendar = new GregorianCalendar(); 
mCalendar.set(Calendar.YEAR, 2014); // Set only year 
mCalendar.set(Calendar.MONTH, Calendar.DECEMBER); // Don't change
mCalendar.set(Calendar.DAY_OF_MONTH, 31); // Don't change
int totalWeeks = mCalendar.get(Calendar.WEEK_OF_YEAR);

不要在意每月的 30、28 和 29 天。一年的最后一天(任何一年)总是 12 月 31 日。所以你需要设置那一天。并将mCalendar.get(Calendar.WEEK_OF_YEAR)返回该年的总周数。


更新动态方式

private int getTotalWeeksInYear(int year) {
        Calendar mCalendar = new GregorianCalendar(); 
        mCalendar.set(Calendar.YEAR, year); // Set only year 
        mCalendar.set(Calendar.MONTH, Calendar.DECEMBER); // Don't change
        mCalendar.set(Calendar.DAY_OF_MONTH, 31); // Don't change
        return mCalendar.get(Calendar.WEEK_OF_YEAR);
    }

    // Call as
    int totalWeeks = getTotalWeeksInYear(2014);

在上面的代码中寻找错误。到您可以使用以下工作正常的代码时

private int getTotalWeeksInYear(int year) {
        Calendar mCalendar = new GregorianCalendar(TimeZone.getDefault()); 
        mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
        // Workaround
        mCalendar.set(year, 
                Calendar.DECEMBER, 
                31);
        int totalDaysInYear = mCalendar.get(Calendar.DAY_OF_YEAR);
        System.out.println(totalDaysInYear);
        int totalWeeks = totalDaysInYear / 7; 
        return totalWeeks;
    }
于 2013-08-26T07:05:21.323 回答
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

只需在此方法中使用当前年份:

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

让 rest 与您的示例相同。

于 2013-08-26T07:04:21.263 回答
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

您可以使用Calendar.getActualMaximum(int)方法获取当年的总周数,如下所示:

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

简单的。

于 2017-09-07T21:17:51.220 回答
0

最快的方法是:根据您来自哪里正确设置日历非常重要,因为周数是根据给定标准确定的。例如,在 Europ 中是 ISO 8061。这意味着一年中的第 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

为什么不使用getActualMaximum的属性Calendar

private int getWeeksCount(final int year, final Locale locale)
{
    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.YEAR, year);

    int totalWeekNumber = calendar.getActualMaximum(Calendar.WEEK_OF_YEAR);
    return totalWeekNumber;
}
于 2017-06-07T09:39:32.353 回答