给出了java.util.Date的一个实例,即星期日。如果这个月有4个星期日,我需要弄清楚所选择的日期是否是
如果这个月有5个星期日,那么我需要知道所选择的日期是否是
我看过JodaTime,但还没有找到相关的功能。这个项目实际上是一个Groovy项目,所以我可以使用Java或Groovy来解决这个问题。
谢谢你,Donal
发布于 2010-05-21 17:15:22
到目前为止,给出的解决方案将告诉你第一、第二、第三、第四或第五。但问题是他想知道“最后”和“倒数第二”。如果发问者真的需要知道“最后”等等,那么就会有一些额外的复杂性。你必须弄清楚一个月中有多少个星期天,才能知道第四个星期天是否是最后一个星期天。第一个想明白的方法是:
GregorianCalendar gc=new GregorianCalendar();
gc.setTime(mydate);
gc.set(Calendar.DAY_OF_MONTH,1); // Roll back to first of month
int weekday=gc.get(Calendar.DAY_OF_WEEK); // day of week of first day
// Find day of month of first Sunday
int firstSunday;
if (weekday==Calendar.SUNDAY)
firstSunday=1;
else
firstSunday=weekday-Calendar.SUNDAY+6;
// Day of month of fifth Sunday, if it exists
int fifthSunday=firstSunday+7*4;
// Find last day of month
gc.add(Calendar.MONTH,1);
gc.add(Calendar.DATE,-1);
int lastDay=gc.get(DAY_OF_MONTH);
int sundays;
if (fifthSunday<lastDay)
sundays=4;
else
sundays=5;这似乎是相当多的工作。有人看到更简单的方法了吗?
发布于 2010-05-21 15:41:27
月份
import java.sql.Date;
import java.util.Calendar;
public class Dow {
public static void main(String[] args) {
Date date = new Date( 2010, 4, 1 );
Calendar cal = Calendar.getInstance();
cal.setTime( date );
for ( int week = 0 ; week < 5 ; week++ ) {
System.out.println( cal.getTime() + " week:" + cal.get( Calendar.DAY_OF_WEEK_IN_MONTH ) );
cal.add( Calendar.WEEK_OF_MONTH, 1 );
}
}
}
> Sun May 01 00:00:00 CEST 3910 week:1
> Sun May 08 00:00:00 CEST 3910 week:2
> Sun May 15 00:00:00 CEST 3910 week:3
> Sun May 22 00:00:00 CEST 3910 week:4
> Sun May 29 00:00:00 CEST 3910 week:5发布于 2010-05-21 15:42:28
return dayOfMonth / 7 + 1;更多编辑
好吧,考虑到杰伊的评论,让我们试试这个:
int sundayId = dayOfMonth / 7 + 1;
if (sundayId == 1) {
return "1st";
} else if (sundayId == 2) {
return "2nd";
} else if (sundayId == 3) {
return ((dayOfMonth + 14 <= daysInMonth) ? "3rd" : "2nd Last");
} else if (sundayId == 4) {
return ((dayOfMonth + 7 <= daysInMonth) ? "2nd Last" : "Last");
} else {
return "Last";
}而daysInMonth的计算方式如下:
if (month == 2) {
if (year % 100) {
return ((year % 400 == 0) ? 29 : 28);
} else {
return ((year % 4 == 0) ? 29 : 28);
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}..。或者以其他方式。
https://stackoverflow.com/questions/2883404
复制相似问题