簡體   English   中英

如何在JAVA中以“dd-MM-yyyy”格式轉換字符串“2011-11-29 12:34:25”

[英]How to convert string “2011-11-29 12:34:25” to date in “dd-MM-yyyy” format in JAVA

我正在嘗試轉換字符串中的日期,並將格式為“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);

首先,您必須將日期時間的字符串表示形式解析為Date對象。

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

然后,將Date對象格式化為首選格式的String。

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

您需要使用另一個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);

TL;博士

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

2011-11-29

使用java.time

現代方法使用java.time類而不是麻煩的遺留類。

ISO 8601

輸入字符串“2011-11-29 12:34:25”的格式幾乎與ISO 8601標准相同。 要完全符合要求,請用T替換中間的SPACE。

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

如果沒有任何時區指示或從UTC偏移,我們將解析為LocalDateTime

LocalDateTime ldt = LocalDateTime.parse( input ) ;

您需要僅限日期的值,因此請提取LocalDate LocalDate類表示沒有時間且沒有時區的僅日期值。

LocalDate ld = ldt.toLocalDate() ;

要以所需格式生成字符串,請指定自定義格式設置模式。

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

關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle教程 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310

從哪里獲取java.time類?

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

當程序試圖構造Date對象時,可能會發生IllegalArgumentException

有什么價值?

以下代碼段正確運行。

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

System.out.println(mydate);

輸出:

29/11/2011

Date的構造函數使用long來表示以毫秒為單位的時間。 您需要使用另一個SimpleDateFormat實例首先將輸入字符串解析為時間戳。

試試這種方式

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM