本文介紹了在Java中將java.util.Date轉換為不同格式的java.util.Date的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我獲取的日期為java.util.Date(非字符串):(java.util.Date)Mon Jul 13 00:00:00 IST 2020
我要將其轉換為:2020-07-13T00:00 Format==>;(";yyyy-MM-dd‘T’HH:mm";),而不是字符串。
我嘗試了以下代碼:
Date scheduleDate=details.getScheduledDate(); // This value is fetched from object passed-- [scheduleDate = (java.util.Date) Mon Jul 13 00:00:00 IST 2020]
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
sd.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
String dateFormat=sd.format(scheduleDate); //Here I get [dateFormat = (java.lang.String) "2020-07-13T00:00"]
Date date = sd.parse(dateFormat); //[date = (java.util.Date) Mon Jul 13 00:00:00 IST 2020]
我注意到字符串格式具有正確的(如預期的)值,但當我將其轉換為java.util.date時,該值又變回了原來的值。
java.util.Date是否支持yyyy-MM-dd‘T’HH:mm格式?
如果是,有沒有人能給我推薦一些好的方法/方向/主題/庫來研究。
謝謝..
推薦答案
tl;dr
從遺留類轉換為現代類。從UTC調整為時區。生成標準ISO 8601格式的文本。我們在輸出中省略了時區或偏移量的上下文,因為您違背了我的建議。
myJavaUtilDate
.toInstant()
.atZone( ZoneId.of( "Asia/Kolkata" ) )
.truncatedTo( ChronoUnit.MINUTES )
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
我希望使用UTC并包含偏移量會更明智。
myJavaUtilDate
.toInstant()
.toString()
詳細信息
日期-時間對象沒有格式,只有文本有格式。
使用java.time類,不要使用java.util.Date
。
將舊版Date
對象轉換為其現代替代對象java.time.Instant
。
Instant instant = myJUDate.toInstant() ;
將UTC調整為您所需的時區。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
顯然您并不關心分秒必爭。因此,讓我們將其截斷為零秒。
ZonedDateTime zdt = zdt.truncatedTo( ChronoUnit.MINUTES ) ;
生成所需格式的文本。Java已與格式化程序捆綁在一起defined for your format。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) ;
我展示了這種格式,因為有人問我。但我不建議這樣做。該格式無法指示時區或與UTC的偏移量。因此,如果它說的是中午,讀者不知道這是指日本東京的中午,法國圖盧茲的中午,還是俄亥俄州