Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Joda DateTime没有';t显示特定时区的正确时间_Java_Datetime_Jodatime - Fatal编程技术网

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
,这可能是您的时区偏移