java date issue in getting month and year
我从数据对象中提取月份和年份时遇到问题。
1 2 3 4 5 6 7 8 | String strdate ="2012-11-07T13:28:23"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); // Date date = dateFormat.parse(strdate); Date date = new Date(); System.out.println(date.getDate()); System.out.println(date.getYear()); System.out.println(date.getMonth()); System.out.println(date); |
我的输出就像
1 2 3 4 | 28 112 10 Wed Nov 28 15:37:30 IST 2012 |
这有什么不对?
what is wrong here ?
你的编译器应该通过警告告诉你出了什么问题:你在
您应该使用
接下来出现的问题是,您只需获取当前日期和时间,而不是使用
但是,如果你对112和10感到困惑,你应该阅读你正在调用的方法的文档,这解释了
然而,理想情况下,你应该使用Joda Time - 它是一个比内置的更合理的日期/时间API。
无论如何,最好使用基于该日期构建的
1 |
请改用日历对象
1 2 3 4 |
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html
当您说
没有错误。 date.getMonth()从零开始(january = 0)
TL;博士
1 2 3 4 5 6 7 | YearMonth ym = YearMonth.from( LocalDateTime.parse("2012-11-07T13:28:23" ) ) int month = ym.getMonthValue(); int year = ym.getYear(); |
细节
其他答案是正确的,尤其是Jon Skeet的答案。
让我补充一点,你正在使用麻烦的旧遗留日期时间类。避免他们。
java.time
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,如
现在处于维护模式的Joda-Time项目建议迁移到java.time。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。
许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport中,并在ThreeTenABP中进一步适应Android。
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。
解析字符串
您的输入字符串缺少有关UTC或时区偏移的任何信息。因此我们将其解析为
ISO 8601
String的格式符合ISO 8601标准。在解析和生成String对象时,java.time类默认使用这些标准格式。因此无需定义解析模式。
1 2 |
获得一年和一年月
生成的对象有更好的方法来处理您想要的部件以及更多。
获得这一年是一个实际的一年,不像你对老班的麻烦。对于2016年,您将获得
1 | int year = ldt.getYear(); // 2016 |
对于月份,getter会从方便的
1 | Month month = ldt.getMonth(); |
但如果你必须,你可以要求一个数字,1-12(不是你在老班上看到的疯狂0-11)。
1 | int monthNumber = month.getValue(); |
<5233>
有一个类用于表示没有日期的年份和月份,
1 | YearMonth ym = YearMonth.from( ldt ); |
点击此代码,您将获得确切的月,年和日期:
1 2 3 4 5 6 7 8 9 10 | String strdate ="2012-11-07T13:28:23"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); Date date = dateFormat.parse(strdate.toString()); Calendar cal = Calendar.getInstance(); cal.setTime(date); System.out.println("month =" + (cal.get(Calendar.MONTH) + 1 ));// add 1 because Month starts from 0 in java System.out.println("year =" + cal.get(Calendar.YEAR)) ; System.out.println("date =" + cal.get(Calendar.DATE)); System.out.println(date); |
我的输出就像
1 2 3 4 | month = 11 year = 2012 date = 7 Wed Nov 07 13:28:23 PKT 2012 |