【发布时间】:2021-03-17 22:38:59
【问题描述】:
我没有看到将日期设置为一个月中某一周的某一天的好方法。 Joda-Time 的 LocalDate 没有 withWeekOfMonth 方法。我可以看到一个可能的算法,但它似乎很复杂,所以我假设我错过了一些东西。我需要确定某人下一次付款的日期。如果他们在每月的第二个星期四付款,那是什么日期。
有人已经解决了这个问题吗?
好的,我想出了这个,看起来效果很好。
/**
* Finds a date such as 2nd Tuesday of a month.
*/
public static LocalDate calcDayOfWeekOfMonth( final DayOfWeek pDayOfWeek, final int pWeekOfMonth, final LocalDate pStartDate )
{
LocalDate result = pStartDate;
int month = result.getMonthOfYear();
result = result.withDayOfMonth( 1 );
result = result.withDayOfWeek( pDayOfWeek.ordinal() );
if ( result.getMonthOfYear() != month )
{
result = result.plusWeeks( 1 );
}
result = result.plusWeeks( pWeekOfMonth - 1 );
return result;
}
【问题讨论】:
-
如果没有 cmets 应该做什么,您的代码很难阅读(几周后您可能会发现同样难以阅读)。现在签名已经很清楚了。
DayOfWeek是什么?