Java8日期时间格式
我需要用Java 8 DateTimeFormatter替换SimpleDataFormat。下面是使用SimpleDataFormat的代码Java8日期时间格式,java,java-8,datetimeformatter,Java,Java 8,Datetimeformatter,我需要用Java 8 DateTimeFormatter替换SimpleDataFormat。下面是使用SimpleDataFormat的代码 DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(source); 现在我需要将其更改为DateTimeFormatter。我试了如下 LocalDateTime ld = LocalDateTime.now(); DateTimeFor
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);
现在,这将生成异常。如果在DateTimeFormatter中查找与sdf等效的文件,请尝试
DateTimeFormatter.ISO\u LOCAL\u DATE
浏览
DateTimeFormatter
类以了解更多格式
LocalDateTime time = LocalDateTime.now();
time.format(DateTimeFormatter.ISO_LOCAL_DATE);
如果只对日期感兴趣,请使用
LocalDate
而不是LocalDateTime
。一种方法是-
LocalDateTime ld = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String date = ld.format(dtf);
如果您希望从LocalDate创建Date对象,那么以下方法可以工作
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
正如@JonSkeet所建议的,如果您使用的是Java8,那么您可能应该完全避免Java.util.Datetl;博士
不需要格式化模式
不需要格式化模式。您的输入字符串恰好是标准ISO 8601格式。默认情况下,这些标准格式在java.time类中用于解析和生成字符串
LocalDate
使用LocalDate
仅用于日期值,不包括一天中的时间和时区
LocalDate ld = LocalDate.parse( "2017-01-23" );
ZoneDateTime
如果需要日期时间,请让java.time确定一天中的第一个时刻。不要假设第一时刻是00:00:00
确定一天中的第一个时刻需要一个时区。日期因地区而异
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ld.atStartOfDay( z );
如果您想通过UTC的镜头感知这一时刻,请提取一个瞬间
对象
Instant instant = zdt.toInstant();
Instant
相当于旧的遗留类java.util.Date
。两者都代表UTC时间线上的一个时刻。现代类的分辨率更高,是纳秒而不是毫秒
避免java.util.Date
正如其他人提到的,您应该坚持使用现代java.time类。但如果你必须,你可以改变信仰。查看添加到旧类的新方法
java.util.Date d = java.util.Date.from( instant ) ;
另外,您的模式不在引号
dtf中。parse(dtf)
不会引发异常-它不会编译。ld与此有什么关系?您是否阅读了DateTimeFormatter
的文档?它有一个例子……那么是什么让你认为你需要使用DateTimeFormatter
?我建议您完全避免使用java.util.Date
。我认为您希望使用LocalDate
而不是LocalDateTime
。我需要在Date中使用它object@user1111880:那么您不应该使用为java.time
类设计的DateTimeFormatter
。@user1111880这里是一个完美的例子
Instant instant = zdt.toInstant();
java.util.Date d = java.util.Date.from( instant ) ;