2016-07-28 70 views
3

下面是我的代碼格式的XMLGregorianCalendar

GregorianCalendar gregory=new GregorianCalendar(); 
gregory.setTime(new Date()); 
XMLGregorianCalendar xmlGregorianCalendar=DatatypeFactory.newInstance().newXMLGregorianCalendar(gregory); 
System.out.println(xmlGregorianCalendar.toString()); 

當我打印在上面的代碼中最後一行SOP我越來越喜歡

2016-07-28T15:25:47.064+05:30 

但是蔭輸出試圖讓輸出

2016-07-28+05:30 

我已經嘗試過不同的格式化程序,但沒有運氣。

任何建議將大大有益的,我

ATLEAST我們可以得到使用SimpleDateFormat的這種格式?

通過使用simpledateformat iam可以得到「2016-07-29 + 0530」。如果我們可以在「05」和「30」之間加入「:」,請讓我知道。我下面

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddZ"); 

在Java版本7和8,可以通過代碼使用下面

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddXXX"); 

,但不知道在Java 6版本

+1

這沒有任何意義。帶時區的日期? – Jens

+0

通過使用simpledateformat iam可以獲得「2016-07-29 + 0530」。如果我們可以在「05」和「30」之間加入「:」,請讓我知道。我的代碼在DateFormat下面dateFormat = new SimpleDateFormat(「yyyy-MM-ddZ」); @Jens –

+0

@Jens它是有道理的,因爲通過改變時區偏移量,你的一天的開始是不同的。在一個時區01:00可能在另一個時區23:00,而你也有不同的一天。 – Alexander

回答

0

,最簡單的是重建JDK7功能。你必須知道,新的XXX計算是基於日曆類的已有字段。 他們採取Calendar.ZONE_OFFSETCalendar.DST_OFFSET去從那裏是這樣的:

int totalOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); 

    StringBuilder sb = new StringBuilder(); 

    //handle zero offset 
    if (totalOffset == 0) { 
     sb.append('Z'); 
    } 

    //convert to minutes because timezones are minute based 
    totalOffset = totalOffset/60000; 
    char prefix = '-'; 
    if (totalOffset >= 0) { 
     prefix = '+'; 
    } 
    sb.append(prefix); 

    //if negative offset, invert now 
    totalOffset = Math.abs(totalOffset); 

    sb.append(String.format("%02d", (totalOffset/60))); 
    sb.append(':'); 
    sb.append(String.format("%02d", (totalOffset % 60))); 

    System.out.println(sb.toString()); 

我希望這個片段可以幫助你從那裏走。

0

像這樣獲得?請注意,我沒有使用格里高利不確定您是否需要特定的格里高利日曆,在這種情況下您必須更改一下。

ZoneOffset myOffset = ZonedDateTime.now().getOffset(); 
System.out.println("ZoneOffset is " + myOffset.getId()); 
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String currentDate = dateFormat.format(new Date()); 
System.out.println(currentDate + myOffset.getId()); 

此打印:

ZoneOffset是05:30

2016年7月29日+ 05:30

+0

不幸的是,Java 6版本中沒有ZoneOffset。如果我必須使用java 8,我將只使用XXX,但情況並非如此。 –