gpt4 book ai didi

Java:如何获取一个月中第 x 天的日期(例如 2012 年 2 月的第三个星期一)

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:05 25 4
gpt4 key购买 nike

我对此有些挣扎。

我想将我的日历设置为:2012 年 2 月的第三个星期一。而且我没有找到使用 Java 执行此操作的任何方法。

例如,如果我想为 2011 年圣诞节设置日历,我可以通过以下方式轻松完成:

Calendar when = Calendar.getInstance();
when.set (Calendar.MONTH, Calendar.DECEMBER);
when.set (Calendar.DAY_OF_MONTH, 25)
when.set (Calendar.YEAR, 2011);

但我不知道如何为 2012 年阵亡将士纪念日(5 月的最后一个星期一)设置它。这是我的代码,但它显然是错误的,因为我根本无法假设 5 月的最后一个星期一会在当年 5 月的第 4 周:

Calendar when = Calendar.getInstance ();
when.set (Calendar.DAY_OF_WEEK,Calendar.MONDAY);
when.set (Calendar.MONTH, Calendar.MAY);
when.set (Calendar.WEEK_OF_MONTH, 4)
when.set (Calendar.YEAR, 2012);

关于我如何以编程方式找出 2012 年 5 月的哪一周(在上面的示例中)是最后一个星期一,有什么建议吗?假设我可以获得该信息,我应该能够让上面的代码正常工作。

我需要一些基本上适用于任何其他示例的东西。可以为相同场景给出确切日期的东西。示例:

哪个日期是:

  • 3rd Thursday of May 2015
  • 1st Monday of June 2050
  • 4th Tuesday of December 2012
  • 2nd Wednesday of July 2000

我的项目确实需要这个,而且我确信它很简单,但我为此伤透了脑筋,却没有任何实际结果可以展示 :) 而且在网上也找不到任何东西。


添加:

好的,这是我一个月中最后一个星期一的位置:

when.set (GregorianCalendar.MONTH, GregorianCalendar.MAY);
when.set (GregorianCalendar.DAY_OF_WEEK, Calendar.MONDAY);
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
when.set (Calendar.YEAR, 2012);

但我不确定如何在同一个月的星期一做几秒钟,就像这样?

when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 2);

有什么建议吗?

最佳答案

在 Java 中进行日期运算(通常,除了最琐碎的事情外,用日期时间做任何事情)Joda-Time是答案:

public static LocalDate getNDayOfMonth(int dayweek,int nthweek,int month,int year)  {
LocalDate d = new LocalDate(year, month, 1).withDayOfWeek(dayweek);
if(d.getMonthOfYear() != month) d = d.plusWeeks(1);
return d.plusWeeks(nthweek-1);
}

public static LocalDate getLastWeekdayOfMonth(int dayweek,int month,int year) {
LocalDate d = new LocalDate(year, month, 1).plusMonths(1).withDayOfWeek(dayweek);
if(d.getMonthOfYear() != month) d = d.minusWeeks(1);
return d;
}

public static void main(String[] args) {
// second wednesday of oct-2011
LocalDate d = getNDayOfMonth( DateTimeConstants.WEDNESDAY, 2, 10, 2011);
System.out.println(d);
// last wednesday of oct-2011
LocalDate dlast = getLastWeekdayOfMonth( DateTimeConstants.WEDNESDAY, 10, 2011);
System.out.println(dlast);
}

编辑:自 Java 8 (2014) 以来,新的 Date API(包 java.time)受 Jodatime 启发/类似,should be preferred .

关于Java:如何获取一个月中第 x 天的日期(例如 2012 年 2 月的第三个星期一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com