将java.util.Date对象转换为新的JDK 8/JSR-310 的最佳方法是什么java.time.LocalDate?
Date input = new Date();
LocalDate date = ???
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法将LocalDate(用Java 8引入)转换为java.util.Date对象?
通过'简单',我的意思是比这更简单:
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点尴尬.
由于我们只对日期部分感兴趣,并且两个对象中都没有时区信息,为什么要明确引入时区?应该隐式采用午夜时间和系统默认时区进行转换.
如何Long从LocalDateTime或的实例中提取纪元值LocalDate?我尝试了以下内容,但它给了我其他结果:
LocalDateTime time = LocalDateTime.parse("04.02.2014 19:51:01", DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
System.out.println(time.getLong(ChronoField.SECOND_OF_DAY)); // gives 71461
System.out.println(time.getLong(ChronoField.EPOCH_DAY)); // gives 16105
Run Code Online (Sandbox Code Playgroud)
我想要的只是1391539861本地日期时间的值"04.02.2014 19:51:01".我的时区是Europe/OsloUTC + 1,夏令时.
在Java应用程序中,使用日期时间和时间戳的混合在MySQL数据库中提取和输入日期信息方面会有什么好处?
在大约200年将Dates 转换为LocalDates时,我得到的结果不一致.使用以下代码进行转换:
private LocalDate toLocalDate(Date localDate)
{
return LocalDateTime.ofInstant(localDate.toInstant(), ZoneId.systemDefault()).toLocalDate();
}
Run Code Online (Sandbox Code Playgroud)
我的ZoneId.systemDefault()是Africa/Harare,它与CAT测试中使用的相匹配.我运行的测试用例是
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
String dateString = "Tue Jan 01 00:00:00 CAT 200";
String dateString2 = "Tue Jan 01 00:00:00 CAT 201";
String dateString3 = "Wed Dec 31 00:00:00 CAT 200";
System.out.println(toLocalDate(simpleDateFormat.parse(dateString)));
System.out.println(toLocalDate(simpleDateFormat.parse(dateString2)));
System.out.println(toLocalDate(simpleDateFormat.parse(dateString3)));
Run Code Online (Sandbox Code Playgroud)
我的预期输出是
0200-01-01
0201-01-01
0200-12-31
Run Code Online (Sandbox Code Playgroud)
或者,如果不是这样,至少始终不正确的值.实际结果是
0199-12-31
0201-01-01
0200-12-31
Run Code Online (Sandbox Code Playgroud)
所以似乎第一个稍微回滚,可能是两个小时对应的CAT时区?但为什么这只发生在一个案例上呢?对2000年进行相同的实验不会产生相同的错误.
在下面的剪辑中,属性$F是类java.time.LocalDateTime或java.time.LocalDate.
<textField pattern="EE. dd.MM.yyyy">
<reportElement...>
</reportElement>
<textFieldExpression><![CDATA[$F{theLocalDateTime}]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)
如何pattern在jasper报告中使用textField格式化此属性 ?
在Cassandra中,列类型设置为Date,在Model类中,字段类型设置为具有getter和setter的java.util.Date。在此期间,com.datastax.driver.mapping.Mapper.save我收到以下异常:
Codec not found for requested operation: [date <-> java.util.Date]
Caused by: com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [date <-> java.util.Date]
at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:56)
at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:25)
at com.datastax.driver.mapping.DriverThrowables.propagateCause(DriverThrowables.java:41)
at com.datastax.driver.mapping.Mapper.save(Mapper.java:272)
Run Code Online (Sandbox Code Playgroud)
在Google搜索过程中发现以下内容:
DATE <-> com.datastax.driver.core.LocalDate : use getDate()
Run Code Online (Sandbox Code Playgroud) 什么是要转换的最佳方式 java.time.LocalDate来java.util.Date?
Date.from(dateToReturn.atStartOfDay(ZoneId.systemDefault()).toInstant()
Run Code Online (Sandbox Code Playgroud)
我一直在尝试这个,但似乎不能正确地与时间一起工作,尽管正确地转换了日期月份和年份。
更新:java.time.LocalDate 不保存时间信息只是使用 java.time.LocalDateTime 代替,一切正常。