Java 使用Android中的Joda Time将时间转换为本地时区

Java 使用Android中的Joda Time将时间转换为本地时区,java,android,datetime,timezone,jodatime,Java,Android,Datetime,Timezone,Jodatime,我想使用android中的Joda时间库将时间转换为手机本地时区 我有UTC的时间,例如:2016-01-14 11:13:56 我现在的时间是:2016-01-1412:13:56 当我运行此代码时: DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate), DateTimeZone.UT

我想使用android中的Joda时间库将时间转换为手机本地时区

我有UTC的时间,例如:2016-01-14 11:13:56

我现在的时间是:2016-01-1412:13:56

当我运行此代码时:

DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.UTC);

String time = String.valueOf(dt));
DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));

String time = String.valueOf(dt));
DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.forID("Europe/Rome"));

String time = String.valueOf(dt));
我得到:2016-01-14T10:13:56.000Z

当我运行此代码时:

DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.UTC);

String time = String.valueOf(dt));
DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));

String time = String.valueOf(dt));
DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.forID("Europe/Rome"));

String time = String.valueOf(dt));
我得到:2016-01-14T11:13:56.000+01:00

当我运行此代码时:

DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.UTC);

String time = String.valueOf(dt));
DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));

String time = String.valueOf(dt));
DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.forID("Europe/Rome"));

String time = String.valueOf(dt));
我得到:2016-01-14T11:13:56.000+01:00

但这是错误的,我应该收到:2016-01-14T12:13:56.000+02:00

是否有我缺少的任何配置。这个问题是否与夏令时有关?从这里的一些问题来看,我已经看到Joda Time管理这个问题

如何在设备本地时间中获取时间


感谢

DateTime对象表示自unix时代以来的特定毫秒。这是您试图表示的时间时刻的规范表示

如果你在罗马、伦敦或纽约,根据你所说的毫秒数打印出DateTime对象,就像一个特定毫秒的字符串别名

当您这样做时:

String time = String.valueOf(dt));
你只是说给我一个支持DateTime对象的千秒的字符串表示,你没有指定你想要的那个毫秒的时区别名,所以它以UTC的形式给你

这:

未指定格式化程序要使用的时区,因此将采用UTC。创建DateTime对象的所有用法在这之后都是无关的,毫秒是设置好的

而是这样做:

DateTimeFormatter inputFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(Time_you_are_coming_from);
DateTimeFormatter outputFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(time_your_are_converting_to);
dt = inputFormatter.parseDateTime("2016-01-14 11:13:56");
System.out.println(outputFormatter.print(dt));

非常感谢,伙计,我不知道为什么我没有看到解决方案:不用担心:D.在迁移到joda并着手解决它之前,我们在Java7日期时间api上有一些有趣的行为。