SimpleDateFormat(" yyyy-MM-dd' T' HH:mm:ssZ")java解析错误的日期?

时间:2016-07-21 10:16:38

标签: java parsing datetime simpledateformat java.util.date

我使用了这个SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")。所以当我将日期2016-01-01T10:30:00-0800超过或等于10:30:00-0800时,那么它将解析(日期)响应,即2016年第二天的日期 - 01-02T00:00:00 + 0530这不是预期的。它改变日期一天。如果我给2016-01-01T10:20:00-0800然后给出确切的日期。所以如果时间应该少于t10:30: 00-0800然后在第二天获得预期结果。

完整代码:

SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public Date deserialize(JsonParser jsonparser, DeserializationContext arg1)   {
  String date = jsonparser.getText();
  dt.parse(date);
}

2 个答案:

答案 0 :(得分:3)

重要的是要了解班级java.util.Date的实例不是日历日期,而是时刻。

java.util.Date转换为字符串表示形式和从字符串表示形式转换始终涉及时区。

您的输入为2016-01-01T10:30:00-0800,表示区域偏移为-8小时(这是美国洛杉矶的时区)。该时刻对应于偏移量为0小时的区域中的2016-01-01T18:30:00+0000(如伦敦,GB)或当地时区内的2016-01-02T00:00:00+0530

如果您想在洛杉矶开始会议并在不同时区显示该时刻,那就没关系了。

如果您想表示没有固有时间信息的日期(如生日),最好使用java.time.LocalDate(如果您使用的是Java 8)或org.joda.time.LocalDate(如果Java 8不是选项) )。

答案 1 :(得分:0)

java.time

您正在使用旧的过时的日期时间类,这些类已被证明设计糟糕,令人困惑且麻烦。改为使用java.time。

java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormatJoda-Time团队还建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

ISO 8601

您的输入字符串符合ISO 8601标准。默认情况下,这些标准格式在java.time类中使用。因此无需指定格式化模式。

偏移

您的输入值与UTC相比有偏差,比UTC晚8小时。

OffsetDateTime类代表这样的值。

OffsetDateTime odt = OffsetDateTime.parse( "2016-01-01T10:30:00-0800" );

时区

时区是与UTC 的偏移量加上用于处理夏令时(DST)等异常的一组规则。如果您确定要作为此值的上下文的时区,请应用它以获得ZonedDateTime

proper time zone name格式ZoneId指定时区(continent/region)。切勿使用诸如ESTIST之类的3-4个字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId zoneId = ZoneId.of( "America/Los_Angeles" );
ZonedDateTime zdt = odt.atZone( zoneId );

更改时区

如果您希望通过本地time in India的镜头看到此值,则可以应用其他时区来创建新的ZonedDateTime。 java.time类使用immutable objects模式。因此请注意,java.time类不是改变(“mutate”)现有对象的时区设置,而是创建一个新对象,其中一些成员基于原始对象的成员。

ZonedDateTime zdt_Kolkata = zdt.withZoneSameInstant( ZoneId.of( "Asia/Kolkata" ) ) ;
相关问题