当前位置: 首页 > 面试题库 >

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

谭宜
2023-03-14
问题内容

我对此有些挣扎。

我想设置日历为: 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月的哪个星期(在上面的示例中)是最后一个星期一?假设我可以获得这些信息,那么我应该可以将上面的代码正常工作。

我需要一些基本上可以用于其他示例的东西。对于相同的场景,可能会给出确切的一天。例子:

哪个日期是:

  • 2015年5月第3个星期四
  • 2050年6月的第一个星期一
  • 2012年12月第4个星期二
  • 2000年7月的第二个星期三

我真的很需要这个,对于我的项目,我相信它很简单,但是我在没有任何实际结果可显示的情况下打破了我的头脑:)而且在网上也找不到任何东西。

添加:

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

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);
}


 类似资料:
  • 问题内容: 我想获取特定月份/年份中第一个星期一的日期。 我有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道本月的第一个星期一,最好是一个int或Integer值。 例如: 我有2014年和1月(1月),这个月的第一个星期一是6号,所以我想返回6。 问题: 我以为可以做到这一点,但是在设置日历(仅提供年和月)时已经遇到了麻烦。此外,我不确定如何使用返回实际的月

  • 在给定年、月和周的情况下,是否有可能获得一周中第一个日期的DAYOFMONTH? 请注意,一周的第一个日期也可能是前一个月,甚至是前一年。 我知道这是可以通过编程实现的,至少使用java。时间、时间场等。。但我想在sql查询级别上这样做,因为当涉及周时,过程中会涉及两个额外的参数,即被视为一周的第一天的DayOfWeek和一个月内一周的最小天数。如果sql和api上的配置不完全相同,则可能会导致不

  • 问题内容: 我对Javascript不太了解,我发现的其他问题与日期操作有关,不仅是在需要时获取信息。 目的 我希望获得以下格式的日期: 2011年1月27日星期四17:42:21打印 到目前为止,我得到以下信息: 我现在需要知道如何获取星期几和一年中的月份(它们的名称)。 有没有一种简单的方法可以做到这一点,或者我应该考虑使用可以简单地使用和索引到正确值的数组? 问题答案: 是的,您需要数组。

  • 问题内容: 我正在尝试往返日期,该日期将有以前的日期,并且将有本月的第一个日期。一月份将会如此,依此类推。如何正确获取当月的第一个日期?我做不到。 问题答案: 尝试 更新(自Java 8以来 ):

  • 问题内容: 寻找一种获取日期格式为“11/1/2009”的日期的方法,这将是下个月的第一个星期日。我想在10月的第一个星期日之后运行此查询,以获取下个月的第一个星期日。用T-SQL查询完成此操作的最佳方法是什么? 谢谢 问题答案: 试试这个: 编辑说明: 下个月的第一个月由以下表达式给出: 或方式:将1更改为2,可以将其修改为从现在起两个月的第一个月: 编辑:作为对@NissanFan和@Anth

  • 问题内容: 我正在尝试选择当前日期前三个月的每月的第一天。 因此,例如,如果当前日期是:“ 2015-11-08”,我的结果将是:“ 2015-08-01” 我希望这是yyyy-mm-dd格式。 我从一开始就尝试过,但是没有运气: 我已经尝试了很多事情,但似乎无法破解,任何建议或帮助都将不胜感激。先感谢您 问题答案: 逻辑很简单: 减去当月的日期减去日期后的1天 减去三个月 在SQL Server