大家好,我无法将日期从一种格式更改为另一种格式。我已经搜索了堆栈溢出并提出了一种解决方案,但是给出了错误的结果。 因为我有这种格式的日期: 2019-04-16 05:50:44 我想将其转换为这种格式 4月4 我编写了此代码进行转换
SimpleDateFormat spf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Date newDate=spf.parse("2019-04-16 05:50:44");
spf= new SimpleDateFormat("MMM dd");
String date = spf.format(newDate);
我得到的结果是1月16日,我不知道为什么... 预先感谢
答案 0 :(得分:3)
从SimpleDateFormat文档中:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
一年中的M个月
m分钟(分钟)
因此,您的代码应为:
SimpleDateFormat spf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date newDate=spf.parse("2019-04-16 05:50:44");
spf= new SimpleDateFormat("MMM dd");
String date = spf.format(newDate);
答案 1 :(得分:0)
LocalDateTime // Represent a date and time-of-day but without a time zone or offset-from-UTC.
.parse(
"2019-04-16 05:50:44".replace( " " , "T" ) // Comply with ISO 8601 standard format by replacing the SPACE in the middle with a `T`.
) // Returns an immutable `LocalDateTime` object.
.format( // Generate a `String` containing text representing the value of this date-time object.
DateTimeFormatter.ofPattern( "MMM dd" , Locale.US ) // The Locale determines the human language and cultural norms used in localizing the words and formatting generated to the resulting text.
) // Returns a `String`.
4月16日
您使用的是可怕的日期时间类,而这些类在几年前已被JSR 310中定义的 java.time 类取代。
转换输入以符合ISO 8601标准。
String input = "2019-04-16 05:50:44".replace( " " , "T" ) ;
由于输入缺少时区或自UTC偏移的指示,因此解析为LocalDateTime
。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
您只需要月份和日期,因此请使用MonthDay
类。我怀疑您可以在代码的其他部分使用此类。
MonthDay md = MonthDay.from( ldt ) ;
生成本地化格式的字符串。
Locale locale = Locale.CANADA_FRENCH; // Or Locale.US etc.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM dd" , locale );
String output = md.format( f );
转储到控制台。
System.out.println( "md.toString(): " + md );
System.out.println( "output: " + output );
md.toString():--04-16
输出:avr。 16
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.*
类。
在哪里获取java.time类?