首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8 DateTimeFormatter

Java8 DateTimeFormatter
EN

Stack Overflow用户
提问于 2017-02-11 20:31:42
回答 4查看 10.8K关注 0票数 0

我需要用Java8 DateTimeFormatter替换SimpleDataFormat。下面是SimpleDateFormat的代码。

代码语言:javascript
复制
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(source);

现在我需要将其更改为DateTimeFormatter。我试过了,如下

代码语言:javascript
复制
LocalDateTime ld = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Date startdate = dtf.parse(dtf);

现在这是在生成异常。

EN

回答 4

Stack Overflow用户

发布于 2017-02-11 20:59:36

代码语言:javascript
复制
   DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
   LocalDate localDate = LocalDate.parse("2017-02-11", dtf);
   System.out.println(localDate.toString());

如果您需要来自LocalDate的Date对象,则可以使用以下方法

代码语言:javascript
复制
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

正如@JonSkeet建议的那样,如果你正在使用Java8,你可能应该完全避免使用java.util.Date

票数 4
EN

Stack Overflow用户

发布于 2017-02-11 20:46:14

如果要在DateTimeFormatter中查找与sdf等效的内容,请尝试使用DateTimeFormatter.ISO_LOCAL_DATE

探索DateTimeFormatter类,了解更多格式。

代码语言:javascript
复制
 LocalDateTime time = LocalDateTime.now();
    time.format(DateTimeFormatter.ISO_LOCAL_DATE);

如果仅在Date中执行,则使用LocalDate而不是LocalDateTime

票数 2
EN

Stack Overflow用户

发布于 2017-02-12 02:05:39

tl;dr

代码语言:javascript
复制
java.util.Date.from(

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

)

不需要格式化模式

不需要格式化模式。您的输入字符串恰好是标准ISO 8601格式。这些标准格式在java.time类中默认用于解析和生成字符串。

LocalDate

使用LocalDate作为仅限日期的值,不带时间,也不带时区。

代码语言:javascript
复制
LocalDate ld = LocalDate.parse( "2017-01-23" );

ZonedDateTime

如果你想要一个日期-时间,让java.time来决定一天中的第一个时刻。不要假设第一个时刻是00:00:00

确定一天中的第一个时刻需要一个时区。全球各地的日期因地区而异。

代码语言:javascript
复制
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ld.atStartOfDay( z );

如果您希望通过UTC的镜头感知该时刻,请提取一个Instant对象。

代码语言:javascript
复制
Instant instant = zdt.toInstant();

Instant等同于旧的遗留类java.util.Date。两者都以UTC表示时间线上的某个时刻。现代的类有更好的分辨率,纳秒而不是毫秒。

避免java.util.Date

正如其他人提到的,您应该坚持使用现代的java.time类。但如果你必须这样做,你可以转换。查看添加到旧类中的新方法。

代码语言:javascript
复制
java.util.Date d = java.util.Date.from( instant ) ; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42175899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档