[英]Day of month - java calendar
我想要得到多少个月的时间。 我有以下代码:
Calendar cal = Calendar.getInstance();
cal.set(2013, 1, 1);
System.out.println(cal.getActualMaximum(cal.DAY_OF_MONTH));
2013年的Januar(以及其他Yaers :))已经有31天了,但是,我仍然有28天,你知道我哪里出错了吗? 谢谢。
阳历和朱利安历中的第一月是一月,即0。 最后一个取决于一年中的月份数。 您将获得2月的最高天数。
试试cal.set(2013, 0, 1);
@ sunrize920已发现。 为避免出错,我发现尽可能使用Calender指定的值更容易。 因此,在您想要的情况下,将是:
cal.set(2013, Calendar.JANUARY, 1);
轻松得多,并且省去了对Calendar从0到1数月的记忆...
如果您想获得2013年1月的天数
尝试
cal.set(2013,0,1);
YearMonth.from( // Represent the month as a whole with `YearMonth` class.
LocalDate.of( 2013 , Month.JANUARY , 1 ) // A date-only value, without time-of-day and without time zone.
)
.lengthOfMonth() // As for the month’s length. Returns an `int`.
31
现代方法使用java.time类来代替麻烦的旧日期时间类,例如Date
& Calendar
。
LocalDate
LocalDate
类表示没有日期和时区的仅日期值。
时区对于确定日期至关重要。 在任何给定时刻,日期都会在全球范围内变化。 例如, 法国巴黎午夜过后几分钟是新的一天,而在魁北克蒙特利尔仍然是“昨天”。
如果未指定时区,则JVM隐式应用其当前的默认时区。 该默认值可能随时更改,因此您的结果可能会有所不同。 最好将您的期望/期望时区明确指定为参数。
以continent/region
的格式指定正确的时区名称 ,例如America/Montreal
, Africa/Casablanca
或Pacific/Auckland
。 切勿使用EST
或IST
等3-4个字母的缩写,因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
如果要使用JVM的当前默认时区,请提出要求并作为参数传递。 如果省略,则隐式应用JVM的当前默认值。 最好明确一点,因为缺省值可以在运行时随时由JVM中任何应用程序的任何线程中的任何代码更改。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
或指定一个日期。 您可以用数字设置月份,一月至十二月的理智编号为1-12。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,最好使用预定义的Month
枚举对象,一年中的每个月使用一个。 提示:在整个代码库中使用这些Month
对象,而不是仅使用整数,可以使您的代码更具自文档性,确保有效值并提供类型安全 。
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
YearMonth
对于该LocalDate
,获取其整个月,由YearMonth
类表示。
YearMonth ym = YearMonth.from( ld ) ;
询问YearMonth
对象的长度,即YearMonth
的天数。
int lengthOfMonth = ym.lengthOfMonth() ;
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的旧式日期时间类,例如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程 。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310 。
您可以直接与数据库交换java.time对象。 使用与JDBC 4.2或更高版本兼容的JDBC驱动程序 。 不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目为将来可能在java.time中添加内容提供了一个试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.