【问题标题】:How to get a date by giving the week of the month and day of the week如何通过给出月份中的星期和星期几来获取日期
【发布时间】:2018-11-21 10:54:35
【问题描述】:

我如何通过给出月份中的星期和星期几来获取日期。

示例:如果我需要 2018 年 11 月的第三个星期二。

一个月的第几周:3, 星期几:3

预计日期:2018 年 11 月 20 日

但我们得到的值是:2018 年 11 月 13 日。由于该月的开始日期(星期四)小于预期日期(星期二)。

   Calendar calendar = Calendar.getInstance();  
   calendar.set(Calendar.YEAR,2018 );  
   calendar.set(Calendar.MONTH, 10);  
   calendar.set(Calendar.WEEK_OF_MONTH, 3);  
   calendar.set(Calendar.DAY_OF_WEEK, 3);  
   System.out.println("Time " + calendar.getTime());

我如何获得正确的日期?

【问题讨论】:

  • 如果只输入月份的星期几和星期几,那么如何确定是哪个月份呢?
  • WEEK_OF_MONTH 应该是 4。因为 20 日是 11 月的第 4 周。使用这个值可以正常工作。经过测试。
  • Calendar 类存在设计问题并且早已过时。使用现代 Java 日期和时间 API java.time。根据您对一个月中周数的定义,WeekFields 类可能很有用。

标签: java date calendar dayofweek week-number


【解决方案1】:

如果您使用的是 Java 8,则可以这样做,

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Main {
    public static void main(String[] args) {
        LocalDate input = LocalDate.now();
        int ordinal = 3;
        DayOfWeek weekday = DayOfWeek.THURSDAY;
        TemporalAdjuster ta = TemporalAdjusters.dayOfWeekInMonth(ordinal, weekday) ;
        LocalDate adjusted = input.with( ta );
        System.out.println(adjusted.toString());
    }

}

我从here 获取了它,在给定的链接中还有更多方法可以做到这一点。

【讨论】:

  • 对于 Java 6 和 7,可以在 ThreeTen-Backport 项目中找到此功能。
【解决方案2】:

您可以使用以下代码:

LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.TUESDAY));

这将输出:

2018-11-20

更多信息可以在java文档here中找到

【讨论】:

    【解决方案3】:

    如果你想使用日历,那么:

    int year = 2018;
    int month = 10;  // zero based November
    
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
    calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);
    calendar.set(Calendar.MONTH, month);
    calendar.set(Calendar.YEAR, year);
    System.out.println(calendar.getTime());
    

    【讨论】:

    • 这些可怕的旧类在几年前被 java.time 类所取代。
    • 我知道,这就是为什么我给我的答案加上前缀:如果你想使用日历,那么。其他答案涵盖了现代方式。
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2022-01-21
    • 2021-07-19
    • 2018-07-14
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多