【问题标题】:trying to parse/formate date with timezone using joda-time/java尝试使用 joda-time/java 使用时区解析/格式化日期
【发布时间】:2025-12-21 03:45:11
【问题描述】:

我正在尝试使用 joda-time 将日期解析为类似于 03-23-2015 21:16:00 GMT+05:00 但我无法实现它,但是它与 SimpleDateFormat 一起工作正常但出于某种原因我想使用 Joda-Time ( see my question on SO.)

请注意,我不想将时区硬编码为GMT+05:00,但我想设置用户的默认时区。

我正在尝试:

public class Consts{

    public static final DateTimeFormatter DATE_FORMATTER_2 = DateTimeFormat
            .forPattern("MM-dd-yyyy HH:mm:ss z");
    public static final DateTimeFormatter DATE_FORMATTER_TEMP_1 = DateTimeFormat
            .forPattern("MM-dd-yyyy HH:mm:ss Z");

}

然后我将这些格式化程序用作:

        cDate = new LocalDateTime(DateTimeZone.getDefault());
        sDate = new LocalDateTime(DateTimeZone.getDefault());
        eDate = new LocalDateTime(DateTimeZone.getDefault());

        if (mStartTimeTV.getText().toString().equals("Now")) {
            sDate = cDate;
        } else {
            sDate = Consts.DATE_FORMATTER_WITHOUT_TIME_ZONE
                    .parseLocalDateTime(mStartTimeTV.getText().toString());
        }

        if (!mEndTimeTV.getText().toString().equals("")) {
            eDate = Consts.DATE_FORMATTER_WITHOUT_TIME_ZONE
                    .parseLocalDateTime(mEndTimeTV.getText().toString());
        } else {
            eDate = sDate;
        }

在将日期发送到服务器时,我将它们格式化为:

        String s0 = Consts.DATE_FORMATTER_2.print(sDate);
        String s = Consts.DATE_FORMATTER_2.withZone(
                DateTimeZone.getDefault()).print(sDate);
        String s1 = Consts.DATE_FORMATTER_TEMP_1.print(sDate);

但输出始终是:03-24-2015 16:07:23

我也尝试过ZZZZ,但没有运气。

【问题讨论】:

  • LocalDateTime 上没有时区。如果你使用像DateTime 这样实际上有一个区域的东西怎么办?
  • @AndyTurner 我也尝试过使用DateTime,但让我再次检查一下。
  • 是的 @AndyTurner DateTime 是必需的,而不是 LocalDateTime。谢谢。

标签: java android date jodatime


【解决方案1】:

LocalDateTime 没有时区,因此无需格式化。您应该改用DateTime,您可以使用LocalDateTime.toDateTime(timeZone) 获得。

【讨论】: