我只想问一下获得某个月的周数的有效方法。我有一个月号和功能的功能。 year作为参数,函数的返回值应该是一个int数组,其中包含特定月份的周数。(如下所示......)
public int[] getWeeksOfMonth(int month, int year){
//what's the efficient way to implement this??
}
答案 0 :(得分:9)
Calendar
类的WEEK_OF_YEAR
属性对您有用。
创建一个新日期,该日期将是给定月份的第一天。获取当天的一周,假设您获得start
价值。
创建一个新日期,该日期将是给定月份的最后一天。获取当天的一周中的一周,现在您获得end
值。
最后,创建一个简单的int[]
,其中包含start
到end
的值。
答案 1 :(得分:5)
日历cal = Calendar.getInstance();
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
答案 2 :(得分:3)
我不确定您是否要返回一个长度等于月中天数的数组,每个值都是相应日期的星期数,或者所有不同指定月份中天数的周数。假设它是前者,这应该有效:
public static int[] getWeeksOfMonth(int month, int year)
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, 1);
int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int weeks[] = new int[ndays];
for (int i = 0; i < ndays; i++)
{
weeks[i] = cal.get(Calendar.WEEK_OF_YEAR);
cal.add(Calendar.DATE, 1);
}
return weeks;
}
如果您想要指定月份中各天的不同周数数组:
public static Integer[] getWeeksOfMonth(int month, int year)
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, 1);
Set<Integer> weeks = new HashSet<Integer>();
int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < ndays; i++)
{
weeks.add(cal.get(Calendar.WEEK_OF_YEAR));
cal.add(Calendar.DATE, 1);
}
return weeks.toArray(new Integer[0]);
}
(注意这最后一个示例返回一个Integer
个对象的数组,但修改它以返回int
的数组是微不足道的。
答案 3 :(得分:3)
我认为,这更为简单:
Calendar now = Calendar.getInstance();
System.out.println("Current week of month is : " +
now.get(Calendar.WEEK_OF_MONTH));
答案 4 :(得分:0)
get(Calendar.WEEK_OF_YEAR)