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

问题描述 投票:0回答:9

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

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
9个回答
45
投票

使用 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);

2
投票
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 日


1
投票

测试了这段代码

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


1
投票

tl;博士

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

java.time

其他答案现已过时。麻烦的旧日期时间类(例如

java.util.Date
java.util.Calendar
java.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 ) ;

2011年1月1日


关于java.time

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

java.util.Date
Calendar
SimpleDateFormat

Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

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

从哪里获取java.time类?

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

Interval
YearWeek
YearQuarter
more


1
投票

enter image description here

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) {

}

0
投票

一行:

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"));

0
投票
    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

0
投票

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

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();
            }
        }

0
投票
enter code here
try {
String str_entereddate = "2024-11-08";

DateFormat Ourformatis = new SimpleDateFormat("yyyy-MM-dd"); 
Date date2 = Ourformatis.parse(str_entereddate);
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy"); 
String finalString = outputFormat.format(date2);
Log.e("FinalString", finalString);} catch (Exception ex) {
Log.e("date error", "Error");}

O/P 2024年8月11日

如果我们将 ("yyyy-MM-dd") 替换为 ("yyyy-MM-DD");

String str_entereddate = "2024-11-08";

DateFormat Ourformatis = new SimpleDateFormat("yyyy-MM-DD");
 Date date2 = Ourformatis.parse(str_entereddate);
SimpleDateFormat outputFormat = new SimpleDateFormat("DD-MM-yyyy"); 
String finalString = outputFormat.format(date2);
Log.e("FinalString", finalString);

输出将是, 2024年8月1日

月份将显示 01 而不是 11,因为

DD 是“一年中的某一天”, dd 是“一月中的某一天”, MM 是“一年中的月份” mm 是“一小时中的分钟” yyyy 日历年 2023

© www.soinside.com 2019 - 2024. All rights reserved.