2012-09-21 60 views
5

我想知道某个特定日子在哪个月的哪一周。例如,2012年9月20日属于9月的第4周,但下面的代码将其显示为3,这是不正确的。系统将天数除以7并返回输出,这不是我所需要的。我已经在Joda API的搜索,但无法找到解决方案。请让我知道有没有办法在一周推测一个月了,每天下降如何查找本月的星期

Calendar ca1 = Calendar.getInstance(); 

    ca1.set(2012,9,20); 

    int wk=ca1.get(Calendar.WEEK_OF_MONTH); 
    System.out.println("Week of Month :"+wk); 
+1

“......这是不是我需要” - 好了,那么究竟做* *您需要什么?清除这些规则,然后用Java代码写下它们。 – Jesper

回答

7

这是由于两个原因:

第一个是这个(从API):

一个月或一年的第一周被定义为最早的七天内开始对getFirstDayOfWeek()和含有至少 getMinimalDaysInFirstWeek()天

它的默认值变化(我的是4),但你可以用

Calendar.setMinimalDaysInFirstWeek()

的第二个原因将其设置为您的首选值是一个@Timmy在他的回答长大。您需要对您的代码进行两项更改才能正常工作。完整的工作例如:

public static void main(String[] args) { 
    Calendar ca1 = Calendar.getInstance(); 
    ca1.set(2012, Calendar.SEPTEMBER, 20); 
    ca1.setMinimalDaysInFirstWeek(1); 
    int wk = ca1.get(Calendar.WEEK_OF_MONTH); 
    System.out.println("Week of Month :" + wk); 
} 

这将打印

Week of Month :4 
+0

通过调用ca1.setMinimalDaysInFirstWeek(2);仍然是返回3.我试图找出任何标准的API在那里,但我认为日历或JOA日期中没有API存在。我得出结论我必须编写代码来确定特定日期的某个月的一周 – user1686408

+0

我接受了您的答案并且它有效 – user1686408

3

月是从零开始。所以ca1.set(2012,9,20)实际上是将日历设置为十月。

+0

通过设置月份,它仍将周显示为3而不是4 ca1.set (2012,Calendar.SEPTEMBER,20); – user1686408

+0

奇怪。在我的机器上,它返回4。 – Timmy

1

为确保设置了正确的月份,请尝试使用Calendar-Class提供的月份常量。

-1
class test { 
    public static void main(String[] args){ 
     Calendar cal = Calendar.getInstance();  
     cal.set(2016, Calendar.AUGUST, 01); 
     printDayOFWeek(cal, Calendar.MONDAY, 5);//prints monday on 5th week 
    } 
} 

private static void printDayOFWeek(Calendar cal, int day, int whatweek) { 
    cal.set(Calendar.DAY_OF_WEEK, day);//day = Mon, tue, wed,..etc 
    cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, -1); //-1 return last week 

    Date last = cal.getTime(); 
    cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, whatweek); 

    Date one = cal.getTime(); 
    if(one.before(last) || one.compareTo(last) ==0) 
    { 
     System.out.println(whatweek +"WEEK" + cal.getTime()); 
    } 
} 
0

对于那些乔达时间的工作,这是我在用的:

/** 
* For a week starting from Sunday, get the week of the month assuming a 
* valid week is any week containing at least one day. 
* 
* 0=Last,1=First,2=Second...5=Fifth 
*/ 
private int getWeekOfMonth(MutableDateTime calendar) 
{ 
    long time = calendar.getMillis(); 
    int dayOfMonth = calendar.getDayOfMonth(); 
    int firstWeekday; 
    int lastDateOfMonth; 
    int week; 
    int weeksInMonth; 

    calendar.setDayOfMonth(1); 
    firstWeekday = calendar.getDayOfWeek(); 
    if (firstWeekday == 7) 
    { 
     firstWeekday = 0; 
    } 
    calendar.setHourOfDay(0); 
    calendar.addMonths(1); 
    calendar.addDays(-1); 
    lastDateOfMonth = calendar.getDayOfMonth(); 
    weeksInMonth = (int)Math.ceil(1.0*(lastDateOfMonth + firstWeekday)/7); 
    week = (byte)(1 + (dayOfMonth + firstWeekday - 1)/7); 
    week = (week == weeksInMonth)?0:week; 
    calendar.setMillis(time); 

    return week; 
} 
相关问题