Datetime 使用Joda Time获得每月的一周

Datetime 使用Joda Time获得每月的一周,datetime,jodatime,Datetime,Jodatime,是否可以使用解析日期并提取月份的周数。我知道可以为一年中的一周提取,但我找不到如何/是否可以提取月份中的一周 示例:2014-06_03,其中03是本月的第三周 DateTime dt = new DateTime(); String yearMonthWeekOfMonth = dt.toString("<PATTERN for the week of month>"); DateTime dt=newdatetime(); 字符串yearMonthWeekOfMonth=dt.

是否可以使用解析日期并提取月份的周数。我知道可以为一年中的一周提取,但我找不到如何/是否可以提取月份中的一周

示例:2014-06_03,其中03是本月的第三周

DateTime dt = new DateTime();
String yearMonthWeekOfMonth = dt.toString("<PATTERN for the week of month>");
DateTime dt=newdatetime();
字符串yearMonthWeekOfMonth=dt.toString(“”);

我尝试过“yyyyMMW”模式,但不被接受。

当前的
joda time
版本不支持每月的一周,因此您应该使用一些变通方法。
1)例如,您可以使用下一种方法:

   static DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM_'%d'");
   static String printDate(DateTime date)
   {
      final String baseFormat = FORMATTER.print(date); // 2014-06_%d 
      final int weekOfMonth = date.getDayOfMonth() % 7;
      return String.format(baseFormat, weekOfMonth);
   }
用法:

DateTime dt = new DateTime();
String dateAsString = printDate(dt);  
2)您可以使用Java 8,因为Java的API支持“每月一周”字段

  java.time.LocalDateTime date = LocalDateTime.now();
  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM_W");
  System.out.println(formatter.format(date));

Joda中的此选项可能更好:

Weeks.weeksBetween(date, date.withDayOfMonth(1)).getWeeks() + 1

对于您不太喜欢计算的情况:

    DateTime date = new DateTime();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date.toDate());
    int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);

如果一周的开始日是星期一,则可以使用它:

public int getWeekOfMonth(DateTime date){
    DateTime.Property dayOfWeeks = date.dayOfWeek();
    return (int) (Math.ceil((date.dayOfMonth().get() - dayOfWeeks.get()) / 7.0)) + 1;
}

感谢您的回复,最终使用SimpleDataFormat为我完成了这一任务,但很高兴知道第一个解决方案的Java 8Correction支持它:
final int weekOfMonth=(date.getDayOfMonth()/7)+1请注意,如果
date>则date.withDayOfMonth(1)
以上代码返回负值,至少对于
joda time 2.9.1
,不知道是错误还是预期行为,但根据API,它应该是
(开始,结束)
,公共静态周间隔(ReadablePartial start,ReadablePartial end)
,org.joda.time.ReadableInstant)您可以随时执行Weeks.weeksBefore(date1.isBefore(date2)?date1:date2,date1.isBefore(date2)?date2:date1)).getWeeks()+1