2017-02-16 72 views
0

下面是我的編碼:後,時區不能轉換

private final String TIME_ZONE_ID_TRKD_DEFAULT = "Etc/GMT"; 
private XMLGregorianCalendar getStartDateTime(boolean startFromZeroHour) { 
    XMLGregorianCalendar xmlCal = null; 
    try { 
     xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(); 
    } catch (DatatypeConfigurationException e) { 
     e.printStackTrace(); 
    } 
Calendar now = Calendar.getInstance(TimeZone.getTimeZone("Asia/Singapore")); 
now.setTimeZone(TimeZone.getTimeZone(TIME_ZONE_ID_TRKD_DEFAULT)); 
xmlCal.setDay(now.get(Calendar.DAY_OF_MONTH)); 
    xmlCal.setMonth(now.get(Calendar.MONTH) + 1); 
    xmlCal.setYear(now.get(Calendar.YEAR)); 
    xmlCal.setTime(now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND)); 

請您指點爲什麼不能轉換,我應該怎麼辦..

+0

什麼是變量* startFromZeroHour?它不在你的代碼片段中使用。 – Alexander

回答

0

的代碼不能編譯是因爲行上有錯誤,您從哪裏獲取日曆的實例。我相信你想這樣做(也許只是複製/粘貼錯誤?):

Calendar now = Calendar.getInstance(TimeZone.getTimeZone("Asia/Singapore")); 
+1

在方法結尾處還缺少結束語,並且返回語句例如'return xmlCal;'就在這行之前。 – Alexander

0

一種更好的方法可能如下:

private final String TIME_ZONE_ID_TRKD_DEFAULT = "Etc/GMT"; 

private XMLGregorianCalendar getStartDateTime(boolean startFromZeroHour) { 
    XMLGregorianCalendar xmlCal = null; 
    try { 
     xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(TimeZone.getTimeZone(TIME_ZONE_ID_TRKD_DEFAULT))); 
    } catch (DatatypeConfigurationException e) { 
     e.printStackTrace(); 
    } 
    xmlCal.setMillisecond(DatatypeConstants.FIELD_UNDEFINED); 
    xmlCal.setTimezone(DatatypeConstants.FIELD_UNDEFINED); 

    if(startFromZeroHour){ 
     xmlCal.setHour(0); 
    } 

    return xmlCal; 
} 

public static void main(String[] args) { 
    Bug b = new Bug(); 
    XMLGregorianCalendar startDateTime = b.getStartDateTime(true); 
    System.out.println(startDateTime); 
    XMLGregorianCalendar startDateTime2 = b.getStartDateTime(false); 
    System.out.println(startDateTime2); 

} 
  1. 首先,我們使用您的時區創建GregorianCalendar實例不變。它表示當前時間(現在),如果使用默認的構造函數。
  2. 然後我們用它來初始化XMLGregorianCalendar
  3. 您不想擁有毫秒和時區部分,所以我們只需使用DatatypeConstants.FIELD_UNDEFINED取消設置即可,如JavaDoc https://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html#setMillisecond(int)中所述。

我加了一部分時間設置爲零,如果startFromZeroHour設置爲。這不是你的代碼的一部分,所以你可能想要刪除或改變它。