春天的日期转换是一天假

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

Bas*_*que 6

太长了;博士

\n\n
LocalDate.parse( "2015-01-30" )\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用适合作业的正确数据类型

\n\n

您正在尝试将仅日期值放入日期时间类型 中java.util.Date方钉,圆孔。在尝试找出与您的约会相关联的时间时,会注入时区,因此会出现问题。

\n\n

LocalDate

\n\n

解决方案:

\n\n
    \n
  • 切勿使用可怕的旧遗留日期时间类,例如java.util.Date. 仅使用现代java.time类。

  • \n
  • 对于仅日期值,请使用LocalDate.

  • \n
\n\n

您的输入字符串恰好采用标准ISO 8601格式。java.time类在解析/生成字符串时默认使用 ISO 8601 格式因此无需指定格式模式。

\n\n
LocalDate ld = LocalDate.parse( "2015-01-30" ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

ZonedDateTime

\n\n

如果你想要一个时刻,一个带有一天中时间的日期,让java.time确定一天中的第一个时刻。切勿假设该时刻是 00:00:00。在某些区域的某些日期,由于夏令时 (DST)等异常情况,可能会是另一个时间,例如 01:00:00 。

\n\n
ZonedId z = ZoneId.of( "America/Montreal" ) ;\nZonedDateTime zdt = ld.atStartOfDay( z ) ;     // Let java.time determine the first moment of that date in that zone.\n
Run Code Online (Sandbox Code Playgroud)\n\n

Instant

\n\n

要将起始时间调整为 UTC(同一时刻,不同的挂钟时间),请提取Instant.

\n\n
Instant instant = zdt.toInstant() ;  // Adjust to UTC. Same moment, same simultaneous point on the timeline, different wall-clock time.\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

Java(传统和现代)和标准 SQL 中的日期时间类型表

\n\n
\n\n

关于java.time

\n\n

java.time框架内置于 Java 8 及更高版本中这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

\n\n

Joda -Time项目现在处于维护模式,建议迁移到java.time类。

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*

\n\n

从哪里获取 java.time 类?

\n\n\n\n

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表

\n\n

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter

\n


pav*_*itn 3

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)