【问题标题】:Joda Time : Set day of the week and week of the monthJoda Time : 设置星期几和一个月的星期几
【发布时间】:2014-09-26 22:51:24
【问题描述】:

我正在使用 Joda 时间,但在设置星期几和月份的星期几时遇到问题。假设如果我选择 April 23,2013 即(每月第 4 周的第 3 天),我想要下一个日期 3rd day of 4th week of the month 即 5 月 21 日。有没有办法做到这一点?

【问题讨论】:

  • 请定义“每月的星期”。请参阅此answer 到相关问题。

标签: java jodatime


【解决方案1】:

我不推荐使用日历 api,因为它非常复杂……并不简单……正如 Ilya 所说。

非常简单的是 jodatime api。您可以使用 joda api 的许多方法来获得许多最简单形式的结果:

那么你可以这样做:

返回当前日期的第三天:

日期时间 dateTime = DateTime.now().withDayOfWeek(3)

设置特定月份,在本例中为四月:

dateTime = dateTime.withMonthOfYear(4)

我不知道jodatime是否有获取当月的星期的方法,但是你可以在jodatime api doc搜索更好 存在的方法:

.withWeekOfWeekyear(int)

.withWeekyear(int)

在以 word 开头的方法:.with...(例如:dateTime.withHourOfDay(2))可以得到很多结果。看看那里,玩得开心...

腹肌!

【讨论】:

    【解决方案2】:

    最简单的方法是 next :使用 class java.util.Calendar

       static DateTime nextMonth(final DateTime current)
       {
          final Calendar curr = current.toCalendar(Locale.getDefault());
          final Calendar retVal = Calendar.getInstance();
          retVal.set(Calendar.DAY_OF_WEEK, curr.get(Calendar.DAY_OF_WEEK));
          retVal.set(Calendar.WEEK_OF_MONTH, curr.get(Calendar.WEEK_OF_MONTH));
          retVal.set(Calendar.MONTH, curr.get(Calendar.MONTH) + 1);
          return new DateTime(retVal).withMillisOfDay(0);
       }   
    

    用法

    DateTime dateTime = new DateTime(2013, 04, 23, 0 ,0 ,0 ,0); //April 23,2013
    DateTime nextMonth = nextMonth(dateTime); // May 21, 2013
    

    【讨论】:

    • 我不得不说.. 当 OP 要求 java.util.Calendar 解决方案时,我看到许多 SO 回答者推动使用 jodatime,但我从来没有看到 java.util.Calendar 解决方案当 OP 要求 jodatime 解决方案时。 #向后
    • 我看到很多人在考虑购买 Yugo 时建议购买本田。但我从未见过有人在考虑购买本田时建议使用 Yugo。嗯……这告诉我什么?
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2022-08-10
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多