Datetime 使用Joda Time获得每月的一周
是否可以使用解析日期并提取月份的周数。我知道可以为一年中的一周提取,但我找不到如何/是否可以提取月份中的一周 示例:2014-06_03,其中03是本月的第三周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.
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