如何使用Joda-Time获取给定月份内的天数?
30 days hath September,
April, June and November,
All the rest have 31,
Excepting February alone
(And that has 28 days clear,
With 29 in each leap year).
我可以按字谜方式获取此信息吗?(当然,我不是指那首诗)
30 days hath September,
April, June and November,
All the rest have 31,
Excepting February alone
(And that has 28 days clear,
With 29 in each leap year).
我可以按字谜方式获取此信息吗?(当然,我不是指那首诗)
如果你有一个表示月份值的对象,那么它非常简单。从该对象获取属性,并获取该属性的最大值。下面是一个示例函数:DateTime
dayOfMonth
DateTime
public static int daysOfMonth(int year, int month) {
DateTime dateTime = new DateTime(year, month, 14, 12, 0, 0, 000);
return dateTime.dayOfMonth().getMaximumValue();
}
是的,虽然它并不像它可能的那样漂亮:
import org.joda.time.*;
import org.joda.time.chrono.*;
import org.joda.time.field.*;
public class Test {
public static void main(String[] args) {
GregorianChronology calendar = GregorianChronology.getInstance();
DateTimeField field = calendar.dayOfMonth();
for (int i = 1; i < 12; i++) {
LocalDate date = new LocalDate(2010, i, 1, calendar);
System.out.println(field.getMaximumValue(date));
}
}
}
请注意,我已经硬编码了有12个月的假设,并且我们对2010年感兴趣。不过,我已经明确选择了公历年表——当然,在其他年表中,你会得到不同的答案。(“12个月”循环也不是一个有效的假设......)
我选择了a而不是a,以便获取值,强调(无论多么微弱:)该值不依赖于时区。LocalDate
DateTime
这仍然不像看起来那么简单,请注意。我不知道如果使用一个年表来构造 ,会发生什么,但是在不同的年表中要求一个字段的最大值。我对可能发生的事情有一些想法,对Joda Time有一定的了解,但这可能不是一个好主意:)LocalDate