我需要用Java8 DateTimeFormatter替换SimpleDataFormat。下面是SimpleDateFormat的代码。
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);现在这是在生成异常。
发布于 2017-02-11 20:59:36
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建议的那样,如果你正在使用Java8,你可能应该完全避免使用java.util.Date
发布于 2017-02-11 20:46:14
如果要在DateTimeFormatter中查找与sdf等效的内容,请尝试使用DateTimeFormatter.ISO_LOCAL_DATE
探索DateTimeFormatter类,了解更多格式。
LocalDateTime time = LocalDateTime.now();
time.format(DateTimeFormatter.ISO_LOCAL_DATE);如果仅在Date中执行,则使用LocalDate而不是LocalDateTime。
发布于 2017-02-12 02:05:39
tl;dr
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 ) ; https://stackoverflow.com/questions/42175899
复制相似问题