首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java数据处理

Java数据处理
EN

Stack Overflow用户
提问于 2010-05-21 15:27:07
回答 6查看 2.2K关注 0票数 4

给出了java.util.Date的一个实例,即星期日。如果这个月有4个星期日,我需要弄清楚所选择的日期是否是

  • 月的第一个星期日
  • 月的第二个星期日
  • 月的第二个星期日
  • 月的最后一个星期日

如果这个月有5个星期日,那么我需要知道所选择的日期是否是

  • 月的第一个星期日
  • 月的第二个星期日
  • 月的第三个星期日
  • 月的第二个星期日
  • 月的最后一个星期日

我看过JodaTime,但还没有找到相关的功能。这个项目实际上是一个Groovy项目,所以我可以使用Java或Groovy来解决这个问题。

谢谢你,Donal

EN

回答 6

Stack Overflow用户

发布于 2010-05-21 17:15:22

到目前为止,给出的解决方案将告诉你第一、第二、第三、第四或第五。但问题是他想知道“最后”和“倒数第二”。如果发问者真的需要知道“最后”等等,那么就会有一些额外的复杂性。你必须弄清楚一个月中有多少个星期天,才能知道第四个星期天是否是最后一个星期天。第一个想明白的方法是:

代码语言:javascript
复制
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;

这似乎是相当多的工作。有人看到更简单的方法了吗?

票数 4
EN

Stack Overflow用户

发布于 2010-05-21 15:41:27

月份

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2010-05-21 15:42:28

代码语言:javascript
复制
return dayOfMonth / 7 + 1;

更多编辑

好吧,考虑到杰伊的评论,让我们试试这个:

代码语言:javascript
复制
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的计算方式如下:

代码语言:javascript
复制
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;
}

..。或者以其他方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2883404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档