Java JodaTime日期时间和使用AM/PM处理区域设置

Java JodaTime日期时间和使用AM/PM处理区域设置,java,datetime,jodatime,Java,Datetime,Jodatime,请任何人向我解释一下,DateTime在上午/下午是如何工作的 public DateTime( int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond, DateTimeZone zone) {

请任何人向我解释一下,DateTime在上午/下午是如何工作的

public DateTime(
        int year,
        int monthOfYear,
        int dayOfMonth,
        int hourOfDay,
        int minuteOfHour,
        int secondOfMinute,
        int millisOfSecond,
        DateTimeZone zone) {
    super(year, monthOfYear, dayOfMonth,
          hourOfDay, minuteOfHour, secondOfMinute, millisOfSecond, zone);
}
我知道我可以通过DateFormat和解析字符串来处理AM/PM,但我对这种方法感兴趣。我想不出来。因为DateTimeZone与区域设置没有直接关系,所以年表也不直接相关

我是否必须根据上午/下午信息手动将小时数更改为24小时类型

我正在使用一个UI html表单小部件>>http请求6个参数,基于区域设置y、m、d、h、m、AM/PM/y、m、d、h、m>>现在我想通过JodaTime的DateTime对象从这些5/6值创建Date对象。我是否可以手动将y、m、d、h、m、AM/PM转换为y、m、d、h、m

我会这样做

public static Date getDateSinceUTC2(Target orderBean, TimeZone tz) {

    int ap = orderBean.getDeadLineAmPm();
    int year = orderBean.getDeadLineYear();
    int month = orderBean.getDeadLineMonth();
    int day = orderBean.getDeadLineDay();
    int hour = orderBean.getDeadLineHour();
    int minute = orderBean.getDeadLineMinute();

    if (ap == 1) {
        hour += 12;
    }

    month++;

    DateTime dt = new DateTime(year, month, day, hour, minute, 0, 0, DateTimeZone.forID(tz.getID()));

    return new Date(dt.getMillis());
}

首先,我会开始使用LocalDateTime,除非你有一个时区

但您可以创建DateTime或LocalDateTime,方法是为其指定任意时间,然后使用:

// I'm assuming amPm is 0 for am and 1 for pm
result = original.withField(DateTimeFieldType.hourOfHalfDay(), hour)
                 .withField(DateTimeFieldType.halfDayOfDay(), amPm);

我想我个人可能会自己执行转换为24小时制。

首先,我会开始使用LocalDateTime,除非你有一个时区

但您可以创建DateTime或LocalDateTime,方法是为其指定任意时间,然后使用:

// I'm assuming amPm is 0 for am and 1 for pm
result = original.withField(DateTimeFieldType.hourOfHalfDay(), hour)
                 .withField(DateTimeFieldType.halfDayOfDay(), amPm);


不过,我想我个人可能会亲自执行24小时制的转换。

关于上午/下午,你是什么意思?你想干什么?我很了解Joda Time,但我不知道处理AM/PM是什么意思。问题是,DateTime是否只接受非美国日期格式?日期格式是字符串表示形式,没有使用AM/PM概念。你是说AM/PM仅作为DateFormat使用的字符串表示形式存在,而JodaTime和Java的日期库的其余部分不使用它?不,我根本没有这么说。我是说非美国日期格式的想法是基于字符串的概念。您使用的哪些字段与区域设置无关,除非您正在解析。对于AM/PM,您的意思是什么?你想干什么?我很了解Joda Time,但我不知道处理AM/PM是什么意思。问题是,DateTime是否只接受非美国日期格式?日期格式是字符串表示形式,没有使用AM/PM概念。你是说AM/PM仅作为DateFormat使用的字符串表示形式存在,而JodaTime和Java的日期库的其余部分不使用它?不,我根本没有这么说。我是说非美国日期格式的想法是基于字符串的概念。您使用的字段与区域设置无关,除非您正在解析。好的,谢谢Jon,我在问题中得到的手动转换是正确的,对吗?+1表示读心术中的持久性。。。但我担心+1会给纽卡斯尔带来麻烦。@埃德加:不完全是这样-这取决于你在午夜得到什么,通常是凌晨12点。在这种情况下,你想减去12,但你想让中午12点单独呆着。也许使用磁场毕竟是一个更好的主意:这个世界对机器来说是一个充满敌意的环境:-@Edgar:如果你认为这很时髦,你应该看看世界上其他的日期和时间。这简直是疯了。好吧,谢谢你,乔恩,我在问题中得到的手动转换是正确的,对吗?+1表示持续读心术。。。但我担心+1会给纽卡斯尔带来麻烦。@埃德加:不完全是这样-这取决于你在午夜得到什么,通常是凌晨12点。在这种情况下,你想减去12,但你想让中午12点单独呆着。也许使用磁场毕竟是一个更好的主意:这个世界对机器来说是一个充满敌意的环境:-@Edgar:如果你认为这很时髦,你应该看看世界上其他的日期和时间。这简直是疯了。