2017-02-11 98 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) ;