我有一个日期字符串“2012-01-26”,我从JSON获得。
我现在必须检查月份和年份是否为当前年份,而不是在ListView中显示数据。
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-DD");
try {
Calendar c = Calendar.getInstance();
c.setTime(dateFormat.parse(event_start_date));
int month = c.get(Calendar.MONTH);
System.out.println(c.get(Calendar.YEAR));
System.out.println("month is"+month);
}
年份值总是正确的,但月份总是零。我想念的是什么人?
答案 0 :(得分:2)
您使用Calendar的实例获取月份。
int month = c.get(Calendar.MONTH);
所以你会得到当月(即1月) 它的意思是0.所以结果是正确的。
检查this。
month - 为与Calendar兼容而设置的月份(0-11)。
如果您想要event_start_date
个月,那么您根本不必使用日历实例。
您可以使用
获取它int month = event_start_date.getMonth();
答案 1 :(得分:2)
java.time.YearMonth
现代解决方案使用在 JSR 310 中定义的 java.time 类。
如果您只关注年份和月份而不关注日期,请使用 YearMonth
类。
LocalDate ld = LocalDate.parse( "2012-01-26" ) ;
YearMonth ym = YearMonth.from( ld ) ;
int y = ym.getYear() ;
Month m = ym.getMonth() ;
String monthName = m.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为 JSR 310。
现在位于 Joda-Time 的 maintenance mode 项目建议迁移到 java.time 类。
您可以直接与您的数据库交换 java.time 对象。使用符合 JDBC driver 或更高版本的 JDBC 4.2。不需要字符串,不需要 java.sql.*
类。 Hibernate 5 和 JPA 2.2 支持 java.time。
从哪里获取 java.time 类?
答案 2 :(得分:1)
monthes从0开始 - 这意味着你得到了1月。 来自Calendar.java:
public final static int JANUARY = 0;
答案 3 :(得分:1)
月份为零(1月= 0),因此您必须添加一个。
答案 4 :(得分:1)
阅读java doc;)
对于MONTH,它说:
Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year is JANUARY which is 0; the last depends on the number of months in a year.
答案 5 :(得分:0)
那是因为日历中的月份从0(1月)开始直到11(12月)