将 Android 中的 Joda 时间转换为本地时区
Convert Time with Joda Time in Android to Local TimeZone
我想在 android 中使用 Joda Time 库将时间转换为 phone 本地时区。
我有 UTC 时间例如:2016-01-14 11:13:56
我现在的时间是:2016-01-14 12:13:56
当我运行这段代码时:
DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
DateTimeZone.UTC);
String time = String.valueOf(dt));
我得到:2016-01-14T10:13:56.000Z
当我运行这段代码时:
DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
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.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 别名。
当你这样做时:
String time = String.valueOf(dt));
你只是说“给我一个支持 DateTime 对象的毫秒的字符串表示,你没有指定你想要那个毫秒的 TimeZone 别名,所以它以 UTC 给你。
这个:
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate)
未指定您希望格式化程序使用哪个时区,因此它将采用 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));
我想在 android 中使用 Joda Time 库将时间转换为 phone 本地时区。
我有 UTC 时间例如:2016-01-14 11:13:56
我现在的时间是:2016-01-14 12:13:56
当我运行这段代码时:
DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
DateTimeZone.UTC);
String time = String.valueOf(dt));
我得到:2016-01-14T10:13:56.000Z
当我运行这段代码时:
DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
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.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 别名。
当你这样做时:
String time = String.valueOf(dt));
你只是说“给我一个支持 DateTime 对象的毫秒的字符串表示,你没有指定你想要那个毫秒的 TimeZone 别名,所以它以 UTC 给你。
这个:
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate)
未指定您希望格式化程序使用哪个时区,因此它将采用 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));