Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8日期时间格式_Java_Java 8_Datetimeformatter - Fatal编程技术网

Java8日期时间格式

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

我需要用Java 8 DateTimeFormatter替换SimpleDataFormat。下面是使用SimpleDataFormat的代码

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.Date

tl;博士 不需要格式化模式 不需要格式化模式。您的输入字符串恰好是标准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 ) ;