2017-02-11 95 views
-4

我需要將SimpleDataFormat替換爲Java 8 DateTimeFormatter。以下是SimpleDateFormat的代碼。Java 8 DateTimeFormatter

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     Date date = sdf.parse(source); 

現在我需要將它更改爲DateTimeFormatter。我試過如下

LocalDateTime ld = LocalDateTime.now(); 
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
Date startdate = dtf.parse(dtf); 

現在這是產生異常。

+0

編輯您的文章,包括你已經嘗試過,爲什麼不起作用 – Janar

+0

@Janar我已經更新了這個問題。你可以請現在upvote – user1111880

+0

什麼是例外,不能你只是用'try catch'子句處理它? – Tacolibre

回答

0

如果在DateTimeFormatter中查找與您的sdf等效的嘗試,請嘗試DateTimeFormatter.ISO_LOCAL_DATE
瞭解更多格式的DateTimeFormatter類。

LocalDateTime time = LocalDateTime.now(); 
    time.format(DateTimeFormatter.ISO_LOCAL_DATE); 

使用LocalDate而不是LocalDateTime如果intrested僅日期。

0

這樣做將是一個辦法 -

LocalDateTime ld = LocalDateTime.now(); 
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
    String date = ld.format(dtf); 
+0

我在Date對象中需要它 – user1111880

+3

@ user1111880:那麼你不應該使用'DateTimeFormatter',它是爲'java.time'類設計的。 –

+1

@ user1111880這裏是完美的例子http://stackoverflow.com/questions/22929237/convert-java-time-localdate-into-java-util-date-type –

1
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
    LocalDate localDate = LocalDate.parse("2017-02-11", dtf); 
    System.out.println(localDate.toString()); 

,如果你想從LOCALDATE的Date對象,下面的作品

Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 

由於@JonSkeet建議,如果你使用Java 8您應該可能避免java.util.Date一起

1

tl;博士

java.util.Date.from(

LocalDate.parse("2017-01-23") 
     .atStartOfDay(ZoneId.of("America/Montreal")) 
     .toInstant() 

) 

無需格式化模式

需要任何格式化模式。您的輸入字符串恰好處於標準ISO 8601格式。這些標準格式在java.time類中默認用於解析和生成字符串。

LocalDate

使用LocalDate約會,唯一的價值,沒有時間的天,沒有時區。

LocalDate ld = LocalDate.parse("2017-01-23"); 

ZonedDateTime

如果你想有一個日期時間,讓java.time確定當天的第一時刻。不要以爲第一時間是00:00:00

確定一天的第一時刻需要一個時區。日期因地區而異。

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ld.atStartOfDay(z); 

如果你想通過UTC的鏡頭感知那一刻,提取Instant對象。

Instant instant = zdt.toInstant(); 

Instant相當於舊的遺留類java.util.Date。兩者都代表UTC時間軸上的一個時刻。現代類具有更好的分辨率,納秒而不是毫秒。

避免java.util.Date

正如其他人所提到的,你應該用現代java.time類粘。但是,如果你必須的話,你可以轉換。尋找新的方法添加到舊的類。

java.util.Date d = java.util.Date.from(instant) ;