Joda DateTime没有显示特定时区的正确时间

时间:2015-05-05 01:51:57

标签: java datetime jodatime

在聊天应用程序中,服务器向我提供了有关消息创建日期的信息

2015-05-04 09:56:27

DateTime个实例给了我2015-05-04T09:56:27.000+08:00

我想在聊天气泡上显示的是这种格式

hh:mm a

我的代码似乎没有显示我想要的小时和分钟,而是以UTC显示小时和分钟

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dt = formatter.parseDateTime(strDate);

String str = String.format("%s:%s %s",
        dt.toString("hh"),
        dt.toString("mm"),
        dt.toString("a")
);

它显示为09:56 am而不是5:56 pm。似乎没有计算+8偏移量。我试过了withOffsetParsed但它也不起作用

DateTimeFormatter df = formatter.withOffsetParsed();
DateTime dt2 = df.parseDateTime(strDate);

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

如果DateTime输出09:56:27.000+08:00,那么这是您当地的时间 - UTC时间是1:56 am。

但是,如果您希望下午5:56输出这个是正确的,那么其他错误。服务器为您提供了一个没有指定时区的时间戳,这是一个糟糕的API。大概这个时间应该被解释为UTC?

尝试将.withZoneUTC()添加到DateTimeFormatter的创建中。这将使它将字符串的时间字段解释为UTC,并且应该生成09:56:27.000Z的DateTime。然后你需要转换这是你当地时区的DateTime来显示它,通过调用.withZone(DateTimeZone.getDefault())(或者你必须为用户获得适当的时区的任何方式)

(你可能会迂腐并调用parseLocalDateTime获取LocalDateTime,因为这是服务器发送的内容,但我个人只是将UTC规则封装到格式化程序中并直接拉出完整的DateTime )