【问题标题】:How to convert string "2011-11-29 12:34:25" to date in "dd-MM-yyyy" format in JAVA如何在JAVA中将字符串“2011-11-29 12:34:25”转换为“dd-MM-yyyy”格式的日期
【发布时间】:2012-01-08 14:17:15
【问题描述】:

我正在尝试将格式为“yyyy-MM-dd HH:mm:ss”的日期转换为“dd-MM-yyyy”。

我已经实现了以下代码,但它给出了:java.lang.IllegalArgumentException

        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date(values);
        String mydate = dateFormat.format(date);

【问题讨论】:

标签: java string date format


【解决方案1】:

首先,您必须将日期时间的字符串表示形式解析为 Date 对象。

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = (Date)formatter.parse("2011-11-29 12:34:25");

然后您将 Date 对象格式化回您喜欢的格式的字符串。

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
String mydate = dateFormat.format(date);

【讨论】:

  • 嗯...不...他要求 dd-MM-yyyy。
【解决方案2】:

你需要解析日期,使用另一个SimpleDateFormat

SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat2.parse(values);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String mydate = dateFormat.format(date);

【讨论】:

    【解决方案3】:

    tl;博士

    LocalDateTime.parse( 
        "2011-11-29 12:34:25".replace( " " , "T " ) 
    ).format (
        DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
    )
    

    29-11-2011

    使用 java.time

    现代方法使用 java.time 类而不是麻烦的遗留类。

    ISO 8601

    您输入的字符串“2011-11-29 12:34:25”的格式接近 ISO 8601 标准。要完全遵守,请将中间的空格替换为T

    String input = "2011-11-29 12:34:25".replace( " " , "T " );
    

    在没有任何时区指示或与 UTC 的偏移量的情况下,我们将其解析为 LocalDateTime

    LocalDateTime ldt = LocalDateTime.parse( input ) ;
    

    您需要仅日期值,因此提取LocalDateLocalDate 类表示没有时间和时区的仅日期值。

    LocalDate ld = ldt.toLocalDate() ;
    

    要生成所需格式的字符串,请指定自定义格式模式。

    DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" );
    String output = ld.format( f );
    

    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

    【讨论】:

      【解决方案4】:

      IllegalArgumentException 可能发生在程序试图构造Date 对象时

      价值是什么?

      以下代码sn-p运行正确。

      SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
      Date date = new Date();
      String mydate = dateFormat.format(date);
      
      System.out.println(mydate);
      

      输出:

      29/11/2011

      【讨论】:

        【解决方案5】:

        Date 的构造函数需要很长的时间,以毫秒为单位。您需要先使用另一个 SimpleDateFormat 实例将您的输入字符串解析为时间戳。

        【讨论】:

          【解决方案6】:

          试试这个方法

          String mydate = "2011-11-29 12:34:25"
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
          Date date = null;
          
          try{
             date = sdf.parse(mydate);
             SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
             String mydate = dateFormat.format(date);
          }catch(Exception ex){
             // handle exception
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-19
            • 1970-01-01
            相关资源
            最近更新 更多