使用time4j获取月中的天数

时间:2017-03-01 19:19:39

标签: java android date time4j

有没有办法使用time4j lib获得一个月内的天数? 在Android默认日历中,我们可以像下面这样简单地使用

Calendar calendar=Calendar.getInstance();
int numOfDaysInMonth=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);      

我的意思是一种标准的方式,而不是疯狂的方式,比如下个月的第一天,然后回来一天,得到一个月的日子。
那么我们可以在time4j日历中做到这一点,例如" PersianCalendar"

2 个答案:

答案 0 :(得分:1)

使用默认最大值的@محمدعلی的答案有一个问题:它不使用任何日历上下文,因此无法确定上个月ESFAND的leap年最大值。但是@Tunaki给出的旧评论已经是一个很好而简单的答案:

PersianCalendar today = PersianCalendar.nowInSystemTime();
int lengthOfCurrentMonth = today.lengthOfMonth();

或者,您也可以使用元素PersianCalendar.DAY_OF_MONTH,但应确定上下文的最大值,而不是默认的最大值:

PersianCalendar today = PersianCalendar.nowInSystemTime();
int lengthOfCurrentMonth = today.getMaximum(PersianCalendar.DAY_OF_MONTH);

两个表达式在所有方面都将产生相同的结果,并且完全相同。

对于标准月份(从FARVARDIN(1)到BAHMAN(11)),结果将与默认最大值一致。但是ESFAND的最后一个月在正常年份有29天,在leap年则有30天。此处介绍的两种方法都会考虑到这一点(但不是默认的最大值方法)。

答案 1 :(得分:0)

是的,有一个干净的方法:

StdCalendarElement<Integer, PersianCalendar> dayOfMonth = 
PersianCalendar.DAY_OF_MONTH;
System.out.println(dayOfMonth.getDefaultMaximum());

所有日历都有此枚举

另外,您可以在文档中获得更多信息: [http://time4j.net/javadoc-en/index.html?help-doc.html] 我通过浏览器搜索快捷方式在“索引”页面中找到了该枚举。