Java Joda DateTime没有';t显示特定时区的正确时间
在聊天应用程序中,服务器向我提供了有关消息创建日期的信息Java Joda DateTime没有';t显示特定时区的正确时间,java,datetime,jodatime,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 = for
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而不是下午5:56。似乎+8偏移量没有计算在内。我尝试了withOffsetParsed
,但它也不起作用
DateTimeFormatter df = formatter.withOffsetParsed();
DateTime dt2 = df.parseDateTime(strDate);
我错过了什么吗?如果DateTime输出
09:56:27.000+08:00
,那么这就是您的本地时间,UTC时间是凌晨1:56
然而,如果您认为这应该在下午5:56输出是正确的,那么其他的东西就错了。服务器正在给您一个没有指定时区的时间戳,这是一个糟糕的API。大概这一次应该解释为UTC
尝试将.withZoneUTC()
添加到DateTimeFormatter的创建中。这将使它将字符串的时间字段解释为UTC,并应产生09:56:27.000Z
的日期时间。然后,您需要通过调用.withZone(DateTimeZone.getDefault())
(或者您必须为用户获取适当时区的任何方式),将这是本地时区中的日期时间转换为显示它
(你可以学究式地调用
parseLocalDateTime
来获取LocalDateTime,因为这是服务器发送的,但就个人而言,我只是将UTC规则封装到格式化程序中,并直接提取完整的日期时间)服务器的时区是什么?请参见2015-05-04T09:56:27.000**+08:00**
末尾的+08:00
,这可能是您的时区偏移