我在更改日期格式时遇到问题

时间:2019-04-16 07:07:33

标签: java android

大家好,我无法将日期从一种格式更改为另一种格式。我已经搜索了堆栈溢出并提出了一种解决方案,但是给出了错误的结果。 因为我有这种格式的日期: 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日,我不知道为什么... 预先感谢

2 个答案:

答案 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)

tl; dr

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日

java.time

您使用的是可怕的日期时间类,而这些类在几年前已被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.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.*类。

在哪里获取java.time类?