2011-08-16 103 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點」)。可能使用這些字段畢竟是一個更好的主意:) –