【问题标题】:Convert string to date then format the date将字符串转换为日期,然后格式化日期
【发布时间】:2011-12-14 11:38:55
【问题描述】:

我正在使用代码将字符串格式化为日期

String start_dt = '2011-01-01';

DateFormat formatter = new SimpleDateFormat("YYYY-MM-DD"); 
Date date = (Date)formatter.parse(start_dt);

但是如何将日期从YYYY-MM-DD 格式转换为MM-DD-YYYY 格式?

【问题讨论】:

标签: java date format simpledateformat


【解决方案1】:

使用SimpleDateFormat#format(Date):

String start_dt = "2011-01-01";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-DD"); 
Date date = (Date)formatter.parse(start_dt);
SimpleDateFormat newFormat = new SimpleDateFormat("MM-dd-yyyy");
String finalString = newFormat.format(date);

【讨论】:

  • 将 'YYYY-MM-DD' 更改为 'yyyy-MM-DD'。 YYYY 无效
  • DateFormat 格式化程序 = new SimpleDateFormat("yyyy-MM-DD"); //错误 DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); //正确
  • 虽然正确,但此答案现已过时。旧的日期时间类(例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat)现在是 legacy,被 java.time 类所取代。见Tutorial by Oracle
【解决方案2】:

测试了这段代码

java.text.DateFormat formatter = new java.text.SimpleDateFormat("MM-dd-yyyy");
java.util.Date newDate = new java.util.Date();
System.out.println(formatter.format(newDate ));

http://download.oracle.com/javase/1,5.0/docs/api/java/text/SimpleDateFormat.html

【讨论】:

    【解决方案3】:
    String start_dt = "2011-01-31";
    
    DateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = (Date) parser.parse(start_dt);
    
    DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy"); 
    System.out.println(formatter.format(date));
    

    打印:2011 年 1 月 31 日

    【讨论】:

      【解决方案4】:

      一行:

      String date=new SimpleDateFormat("MM-dd-yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse("2011-01-01"));
      

      地点:

      String date=new SimpleDateFormat("FinalFormat").format(new SimpleDateFormat("InitialFormat").parse("StringDate"));
      

      【讨论】:

        【解决方案5】:

        String myFormat= "yyyy-MM-dd";
        String finalString = "";
        try {
        DateFormat formatter = new SimpleDateFormat("yyyy MMM dd");
        Date date = (Date) formatter .parse("2015 Oct 09");
        SimpleDateFormat newFormat = new SimpleDateFormat(myFormat);
        finalString= newFormat .format(date );
        newDate.setText(finalString);
        } catch (Exception e) {
        
        }
        

        【讨论】:

          【解决方案6】:

          tl;博士

          LocalDate.parse( "2011-01-01" )
                   .format( DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) ) 
          

          java.time

          其他答案现已过时。麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat,现在是 legacy,被 java.time 类所取代。

          ISO 8601

          输入字符串 2011-01-01 恰好符合日期时间文本的 ISO 8601 标准格式。 java.time 类在解析/生成字符串时默认使用这些标准格式。所以不需要指定格式模式。

          LocalDate

          LocalDate 类表示没有时间和时区的仅日期值。

          LocalDate ld = LocalDate.parse( "2011-01-01" ) ;
          

          通过调用toString生成相同格式的字符串。

          String output = ld.toString() ;
          

          2011-01-01

          DateTimeFormatter

          要解析/生成其他格式,请使用DateTimeFormatter

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

          01-01-2011


          关于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

          【讨论】:

          • 别忘了 LocalDate 需要 Android O (API 26) 版本才能工作......在这种情况下可以考虑旧版答案。
          • @lukecross 不正确。重读我的答案末尾的项目符号。此外,Gradle 插件 4 现在通过称为 API 脱糖 的过程为早期 Android 提供了 java.time 功能的子集。所以不需要使用糟糕的遗留日期时间类。
          • 库是第三方库,Android开发官方还不支持,API Desugaring需要迁移,developer.android.com/studio/write/java8-support。我不知道所有用户的哪个版本。可以是1.7也可以是1.8,在1.7的情况下,legacy都可以用,主要用于小转换之类的简单情况。
          【解决方案7】:
              String start_dt = "2011-01-01"; // Input String
          
              SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // Existing Pattern
              Date getStartDt = formatter.parse(start_dt); //Returns Date Format according to existing pattern
          
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd-yyyy");// New Pattern
              String formattedDate = simpleDateFormat.format(getStartDt); // Format given String to new pattern
          
              System.out.println(formattedDate); //outputs: 01-01-2011
          

          【讨论】:

            【解决方案8】:

            目前,我更喜欢使用这种方法:

            String data = "Date from Register: ";
                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            // Verify that OS.Version is > API 26 (OREO)
                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); 
            // Origin format
                        LocalDate localDate = LocalDate.parse(capitalModels.get(position).getDataServer(), formatter); // Parse String (from server) to LocalDate
                        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
            //Output format
                        data = "Data de Registro: "+formatter1.format(localDate); // Output
                        Toast.makeText(holder.itemView.getContext(), data, Toast.LENGTH_LONG).show();
                    }else{ 
            //Same resolutions, just use legacy methods to oldest android OS versions.
                            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd",Locale.getDefault());
                        try {
                            Date date = format.parse(capitalModels.get(position).getDataServer());
                            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
                            data = "Date from Register: "+formatter.format(date);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
            

            【讨论】:

              猜你喜欢
              • 2022-01-10
              • 2015-04-27
              • 2013-12-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多