2017-02-16 4 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ステートメントなどがありません。前の行の '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. ミリ秒とタイムゾーン部分を持つことは望ましくないので、JavaDoc https://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html#setMillisecond(int)に記載されているとおり、DatatypeConstants.FIELD_UNDEFINEDを使用してそれらの設定を解除するだけです。

私はstartFromZeroHourがに設定されている場合は、ゼロに時間を設定する部分を追加しました。あなたのコードの一部ではありませんでしたので、削除したり変更したりすることができます。

関連する問題