将字符串转换为日期,然后格式化日期

Posted

技术标签:

【中文标题】将字符串转换为日期,然后格式化日期【英文标题】: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.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 java.time 类取代。见Tutorial by Oracle。 【参考方案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 类?

Java SE 8Java SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能都在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门针对 android 改编了 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…

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

【讨论】:

别忘了 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();
            
        

【讨论】:

以上是关于将字符串转换为日期,然后格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为日期和日期时间

js怎么把时间戳转换为日期格式

java怎么将String转换成日期

无法在JavaScript中将String BST日期格式转换为UTC

将日期字符串转换为正确的格式

sql怎么把字符串转换为日期格式