Jer*_*ore 5 java time spring spring-mvc
我有一个采用两个值的POST端点,其中一个是endDate和startDate。当JSON以以下形式发布时:
{ "startDate" : "2015-01-30", "endDate" : "2015-12-30" }
Run Code Online (Sandbox Code Playgroud)
Spring将其转换为始终落后一天的java.util.Date对象。在日志中,我看到:
Validating that startDate Thu Jan 29 16:00:00 PST 2015 < endDate Tue Dec 29 16:00:00 PST 2015
Run Code Online (Sandbox Code Playgroud)
因此,它的时区正确。我以为它与UTC转换有关,但是我不确定如何配置或修改它,以便它使用适当的偏移量进行转换。它的时间戳部分不是必需的-我只关心年,日和月与传入的内容匹配。
如果重要的话,我正在使用Spring(发生在4.0.6和4.1.7中)和POST
LocalDate.parse( "2015-01-30" )\nRun Code Online (Sandbox Code Playgroud)\n\n您正在尝试将仅日期值放入日期时间类型 中java.util.Date。方钉,圆孔。在尝试找出与您的约会相关联的时间时,会注入时区,因此会出现问题。
LocalDate解决方案:
\n\n切勿使用可怕的旧遗留日期时间类,例如java.util.Date. 仅使用现代java.time类。
对于仅日期值,请使用LocalDate.
您的输入字符串恰好采用标准ISO 8601格式。java.time类在解析/生成字符串时默认使用 ISO 8601 格式。因此无需指定格式模式。
\n\nLocalDate ld = LocalDate.parse( "2015-01-30" ) ;\nRun Code Online (Sandbox Code Playgroud)\n\nZonedDateTime如果你想要一个时刻,一个带有一天中时间的日期,让java.time确定一天中的第一个时刻。切勿假设该时刻是 00:00:00。在某些区域的某些日期,由于夏令时 (DST)等异常情况,可能会是另一个时间,例如 01:00:00 。
\n\nZonedId z = ZoneId.of( "America/Montreal" ) ;\nZonedDateTime zdt = ld.atStartOfDay( z ) ; // Let java.time determine the first moment of that date in that zone.\nRun Code Online (Sandbox Code Playgroud)\n\nInstant要将起始时间调整为 UTC(同一时刻,不同的挂钟时间),请提取Instant.
Instant instant = zdt.toInstant() ; // Adjust to UTC. Same moment, same simultaneous point on the timeline, different wall-clock time.\nRun Code Online (Sandbox Code Playgroud)\n\njava.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
Joda -Time项目现在处于维护模式,建议迁移到java.time类。
\n\n要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
\n\n您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*
从哪里获取 java.time 类?
\n\nThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter
String str="2015-01-30";
try{
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd");
isoFormat.setTimeZone(TimeZone.getTimeZone("PST"));
Date date = isoFormat.parse(str);
System.out.println(date);
}catch(ParseException e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |