如何解析UTC时间并在JodaTime java中显示本地时间?

时间:2015-08-14 16:40:16

标签: java jodatime

String strDateTime = "2015-08-14 16:25:12"; //From database that was stored in UTC
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(DateTimeZone.UTC);     
DateTime dateTime = DateTime.parse(strDateTime, dateTimeFormatter);
LocalDateTime local = dateTime.toLocalDateTime();
// local = 2015-08-14T16:25:12.000

I want to get the date in my local time zone???
where local = 2015-08-14T11:25:12.000 // 11 VS 16 

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

在Joda中,LocalDateTime不是 DateTime,您现在,它没有任何时区信息的日期时间 。来自the docs

  

LocalDateTime是一个不可修改的日期时间类,表示没有时区的日期时间。

通过询问dateTime.toLocalDateTime(),您只需要提供与原始UTC版本相同的DateTime,但剥离了UTC信息。相反,它听起来像你想要在时区之间转换; LocalDateTime可能对您或您的解决方案没有用。

使用DateTime.toDateTime(DateTimeZone)在时区之间进行转换;您可以使用DateTimeZone.getDefault获取系统的默认时区,这可能是您正在寻找的时区。

答案 1 :(得分:2)

使用ISO日期时间格式尝试此操作:

    String startDate = "2013-07-12T18:31:01.000Z";
    DateTime dt = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(startDate);

您可以在此处获得更多信息:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%28%29