[英]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);
LocalDateTime.parse(
"2011-11-29 12:34:25".replace( " " , "T " )
).format (
DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)
2011-11-29
現代方法使用java.time類而不是麻煩的遺留類。
輸入字符串“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 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如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
,和更多 。
當程序試圖構造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.