2011-08-16 114 views
1

可以请任何人向我解释,DateTime如何在AM/PM方面工作?JodaTime日期时间和处理与AM/PM的区域设置

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不直接与Locale关联,Chronology也不会。

是否必须手动将基于AM/PM信息的hourOfDay更改为24小时类型?

我正在使用一个UI的html表单控件>> http请求6个参数,基于Locale(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()); 
} 
+0

对于AM/PM而言,你是什么意思?你想做什么?我非常了解乔达时间,但我无法分辨“处理”AM/PM的含义。 –

+0

编辑,问题是,DateTime是否只接受非美国的日期格式? – lisak

+0

“日期格式”是一个字符串表示形式,而不是“使用AM/PM”概念。 –

回答

4

首先,我想用LocalDateTime除非您已实际上有一个时区开始。

但是你可以创建用DateTimeLocalDateTime给它任何小时,然后使用:

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

我想我会亲自可能进行转换,以“24小时 - 小时“我自己。

+0

好的,谢谢乔恩,我在问题中得到的手动转换是正确的,对吧? – lisak

+0

+1为持久的心灵阅读......但+ 1的运煤给纽卡斯尔,我担心。 –

+0

@埃德加:不完全 - 这取决于你得到的午夜,通常表示为“上午12点”。在这种情况下,你想*减去* 12,但你想单独离开中午(“下午12点”)。可能使用这些字段毕竟是一个更好的主意:) –