Java日期格式转换-月份出错
我在用java转换日期时遇到问题,不知道哪里出错了Java日期格式转换-月份出错,java,date,Java,Date,我在用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) fromFo
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日”
我哪里做错了 您的
fromFormat
在应该使用月份的地方使用分钟
String fromFormat = "yyyy-MM-dd";
您的
fromFormat
使用分钟,而它应该使用月份
String fromFormat = "yyyy-MM-dd";
我认为格式的应该是“yyyy-MM-dd” 格式如下:
- m==以小时为单位的分钟
- M==一年中的月份
更多信息:我认为格式的应该是“yyyy-MM-dd” 格式如下:
- m==以小时为单位的分钟
- M==一年中的月份
更多信息:看看的javadoc,看看
m
代表什么。不是你想象的几个月而是几分钟。看看的javadoc,看看m
代表什么。不是你想象中的月,而是分钟。SimpleDateFormat
中的m代表分钟,而m
代表月。因此,您的第一种格式应该是yyyy-MM-dd
m
,在SimpleDateFormat
中代表分钟,而m
代表月份。因此,您的第一种格式应该是yyyy-MM-dd
格式应该是:
String fromFormat = "yyyy-MM-dd";
String fromFormat = "yyyy-MM-dd"
格式应为:
String fromFormat = "yyyy-MM-dd"
tl;博士
2011年12月15日
java.time
虽然正确(大写MM
表示月份),但现在有了更好的方法。麻烦的旧日期时间类现在是遗留的,被java.time类取代
您的输入字符串是标准格式的。因此,无需为解析指定格式模式
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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(tl;dr
2011年12月15日
java.time
虽然正确(大写
表示月份),但现在有了更好的方法。麻烦的旧日期时间类现在是遗留的,被java.time类取代 您的输入字符串是标准格式的。因此无需为解析指定格式模式MM
转储到控制台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 );
ld.toString():2011-12-15 产出:2011年12月15日 看System.out.println( "ld.toString(): " + ld ); System.out.println( "output: " + output );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
classes 从哪里获得java.time类java.sql.*
- 然后
- 内置的
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(好吧,这可能不是你的情况,但可能会帮助某些人。在我的情况下,转换后,月日和月设置为1。因此,无论日期是什么,转换后我得到1月1日,这是错误的。
经过努力,我发现在日期格式中,我使用了
而不是YYYY
。当我将所有大写字母Y改为Y时,效果很好。这可能不是你的情况,但可能会对某人有所帮助。在我的情况下,转换后的月份和月份的日期设置为1。因此,无论转换后的日期是什么,我都会得到1,这是错误的。yyy
经过努力,我发现在日期格式中,我使用了
而不是YYYY
。当我将所有大写字母Y改为Y时,效果很好。我喜欢的一件事是问题回答得这么快。当我键入答案时,一分钟内有3个新答案,太棒了!我喜欢的一件事是问题回答得这么快当我输入答案时,在一分钟内有3个新答案,太棒了!YYYY
- 然后