首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 7-5月4日星期二怎么做?

Java 7-5月4日星期二怎么做?
EN

Stack Overflow用户
提问于 2017-06-12 22:02:17
回答 1查看 74关注 0票数 0

我在java 8中轻松地做到了这一点:

代码语言:javascript
运行
复制
public static Date getFourthTuesdayOfMay(int year){
        LocalDate date = LocalDate.of(year, Month.MAY, 1);
        LocalDate fourthTuesdayOfMay = date.with(dayOfWeekInMonth(4, DayOfWeek.TUESDAY));
        return Date.from(fourthTuesdayOfMay.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

问题是我需要用java 7 .但不知道是怎么回事。

答案是:

代码语言:javascript
运行
复制
Calendar date = Calendar.getInstance ();
        date.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
        date.set(Calendar.MONTH, Calendar.MAY);
        date.set(Calendar.WEEK_OF_MONTH, 4);
        date.set(Calendar.YEAR, year);
        date.set(Calendar.HOUR, 0);
        date.set(Calendar.MINUTE, 0);
        date.set(Calendar.SECOND, 0);
        date.set(Calendar.MILLISECOND, 0);

        return date.getTime();
EN

回答 1

Stack Overflow用户

发布于 2017-06-12 22:18:15

在java 7中,需要使用Calendar作为纯Java解决方案。(Joda几乎是java 8。)

代码语言:javascript
运行
复制
public static Date getFourthTuesdayOfMay(int year) {
    Calendar calendar = Calendar.getInstance();
    int monthDay = 1;
    calendar.set(year, Calendar.MAY, monthDay);
    while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.TUESDAY) {
        ++monthDay;
        calendar.set(Calendar.DAY_OF_MONTH, monthDay);
    }
    // monthDay = 1, ..., 7
    monthDay += 3 * 7; // At most 28 <= 31
    calendar.set(Calendar.DAY_OF_MONTH, monthDay);
    return calendar.getTime();
}

由于没有指定区域设置,所以可以获得非公历日历,因此可以将Locale.FRANCE添加到getInstance中。模块7可以防止一周一天的循环,但这不是那么可读的。

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

https://stackoverflow.com/questions/44509395

复制
相关文章

相似问题

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