从yyyy-MM-dd String中获取月份

时间:2013-01-08 09:20:58

标签: java android date

我有一个日期字符串“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);
 }

年份值总是正确的,但月份总是零。我想念的是什么人?

6 个答案:

答案 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.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为 JSR 310

现在位于 Joda-Timemaintenance 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月)