我在转换java中的日期时遇到问题,不知道我哪里错了...
String dateStr = "2011-12-15";
String fromFormat = "yyyy-mm-dd";
String toFormat = "dd MMMM yyyy";
try {
DateFormat fromFormatter = new SimpleDateFormat(fromFormat);
Date date = (Date) fromFormatter.parse(dateStr);
DateFormat toformatter = new SimpleDateFormat(toFormat);
String result = toformatter.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
输入日期是2011-12-15,我期待结果为“2011年12月15日”,但我将其视为“2011年1月15日”
我哪里错了?
答案 0 :(得分:29)
您的fromFormat
会使用应该使用月数的分钟数。
String fromFormat = "yyyy-MM-dd";
答案 1 :(得分:5)
我认为 fromFormat 应为“yyyy-MM-dd”。
格式如下:
更多:http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
答案 2 :(得分:2)
查看SimpleDateFormat
的javadoc并查看m
代表的内容。不是几个月,而是几分钟。
答案 3 :(得分:2)
String fromFormat = "yyyy-MM-dd";
答案 4 :(得分:2)
格式应为:
String fromFormat = "yyyy-MM-dd"
答案 5 :(得分:1)
m
中的{p> SimpleDateFormat
代表分钟,而M
代表月份。因此,您的第一个格式应为yyyy-MM-dd
。
答案 6 :(得分:1)
LocalDate.parse( "2011-12-15" ) // Date-only, without time-of-day, without time zone.
.format( // Generate `String` representing value of this `LocalDate`.
DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG ) // How long or abbreviated?
.withLocale( // Locale used in localizing the string being generated.
new Locale( "en" , "IN" ) // English language, India cultural norms.
) // Returns a `DateTimeFormatter` object.
) // Returns a `String` object.
2011年12月15日
虽然accepted Answer是正确的(月份大写MM
),但现在有更好的方法。麻烦的旧日期时间类现在已经遗留下来,取而代之的是java.time类。
您的输入字符串采用标准ISO 8601格式。因此,无需为解析指定格式化模式。
LocalDate ld = LocalDate.parse( "2011-12-15" ); // Parses standard ISO 8601 format by default.
Locale l = new Locale( "en" , "IN" ) ; // English in India.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
.withLocale( l );
String output = ld.format( f );
转储到控制台。
System.out.println( "ld.toString(): " + ld );
System.out.println( "output: " + output );
ld.toString():2011-12-15
输出:2011年12月15日
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 7 :(得分:0)
这可能不是你的情况,但可以帮助别人。在转换后的情况下,月份和月份的日期设置为1.因此无论日期是什么,转换后我得到1 jan这是错误的。
在挣扎之后,我发现在日期格式中我使用了YYYY
而不是yyyy
。当我将所有上限Y更改为y时,它可以正常工作。