【问题标题】:Joda Time - Converting Calendar object to LocalDateJoda Time - 将日历对象转换为 LocalDate
【发布时间】:2012-11-27 13:40:06
【问题描述】:

我有一个方法 getCalendarFromClass,它返回一个 Calendar 的对象。

我正在使用 fromCalendarFields 方法将其转换为 Joda Time API 的 LocalDate

LocalDate.fromCalendarFields(a.getCalendarFromClass());

但是在执行此转换时如何指定TimeZone,因为我在javadoc中没有找到它。

fromCalendarFields 方法的 javadoc 提到:

从日历中查询每个字段并分配给 LocalDate。如果您一直使用日历作为本地日期,而忽略区域,这将非常有用。

【问题讨论】:

    标签: java datetime timezone jodatime


    【解决方案1】:

    1) 获取时区:

    TimeZone tz = calendar.getTimeZone();
    

    2) 从日历创建 Joda DateTime:

    DateTimeZone jodaTz = DateTimeZone.forID(tz.getID());
    DateTime dateTime = new DateTime(calendar.getTimeInMillis(), jodaTz);
    

    3) 获取 LocalDate

    LocalDate localDate = dateTime.toLocalDate();
    

    【讨论】:

      【解决方案2】:

      Calendar 有一个时区,当 Joda Time 请求不同的字段值时,将使用(由Calendar)。 Joda Time 只使用calendar.get(Calendar.YEAR) 等。

      从概念上讲,返回的 LocalDate 没有时区。

      【讨论】:

      • 我从中接收日历的数据库的时区为 GMT,但我首先想将其转换为 EST 然后处理它
      • @Abu:您的意思是您想获取存储的 instant 并将其转换为 EST(我假设您的意思是 EDT/EST 取决于日期)?如果是这样,只需将Calendar 上的时区设置为正确的时区,然后再转换为LocalDate
      【解决方案3】:

      LocalDate 看起来不像您想要的课程。来自文档:

      LocalDate 是一个不可变的日期时间类,表示一个日期没有 时区。

      (我的重点)

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 2011-06-07
        • 2016-02-02
        • 2011-09-09
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多