在 JodaTime 的特定时区创建日期时间对象

Creating a datetime object in a particular timezone in JodaTime

我有一个日期、时区和时间作为字符串,我想用该时区的日期和时间构造一个 JodaTime 对象。我写的代码是

String dateString = "2016-06-02";
String time = "01:00:00";
String timezone = "Australia/Brisbane";
DateTime dateInTimezone = DateTime.parse(dateString+" "+time,DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"))
            .withZone(DateTimeZone.forID(timezone));

我希望 dateInTimezone 是用值 2016-06-02T01:00:00.000+10:00 创建的,但它是用值 2016-06-02T18:00:00.000+10:00 创建的。我的系统时区在 America\Los_Angeles。据我了解,我需要花费时间在我的系统时区中作为参数传递并将其转换为我指定的时区。可能这就是为什么 01:00:00 在内部转换为 18:00:00 的原因。

如何在不进行任何转换的情况下创建具有指定时间和指定时区的 joda 时间对象?

在解析之前将时区添加到格式化程序中:

String dateString = "2016-06-02";
String time = "01:00:00";
String timezone = "Australia/Brisbane";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
        .withZone(DateTimeZone.forID(timezone));
DateTime dateInTimezone = DateTime.parse(dateString+" "+time, formatter);

另一种选择是按您的方式进行,但调用 DateTime.withZoneRetainFields(),但如果在初始时区出现无效日期(例如在 DST 间隙之间),则存在解析失败的风险.