2013-04-12 121 views
3

我目前使用SimpleDateFormat創建格式爲yyyy-MM-dd HH:mm:ss的日期時間值。這裏是我的代碼:帶時區格式的Java日期時間

 Date date = new SimpleDateFormat("yy-M-d H:m:ss").parse(datetime); 
    String Dtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); 

但是我想的格式是這個:

2013-04-12T13:38:48+02:00 

我怎樣才能添加時區,以獲得所需的格式?

謝謝!

+0

你可以按照堆棧溢出的鏈接:http://stackoverflow.com/questions/1305350/how-to-get-the-current-date-and-time-of-your-timezone-in-java – user112233

回答

9

看看SimpleDateFormat的the API documentation。您可以看到,您可以使用字符'z'作爲時區信息。

例: 「YYYY.MM.DD G '在' HH:MM:SS Z」 給你 「2001年7月4日在AD PDT 12時08分56秒」

要設置時區上的日期看看this question and the answers

+2

謝謝!但最後z增加了+200。有沒有辦法讓「+02:00」?我需要時區中的「:」。 – diego10

+1

@ diego10 - FYI - 帶或不帶':',帶或不帶'T'都是ISO8601格式的可接受形式。所以假設你想要這種格式與某些東西交換 - 你應該沒問題。不過,如果你想要更好的日期處理,你可能想看看[喬達時間](http://joda-time.sourceforge.net/)。 –

+0

是的..我想通了..謝謝! – diego10

3

這是XML/XSD dateTime數據類型格式。使用javax.xml.datatype.XMLGregorianCalendar中

XMLGregorianCalendar gc = DatatypeFactory.newInstance().newXMLGregorianCalendar("2013-04-12T13:38:48+02:00"); 
    System.out.println(gc); 

輸出

2013-04-12T13:38:48+02:00 
+1

這是一個。順便說一句,您可以使用toGregorianCalendar.getTime來獲取java.util.Date。 –

-1

您可以輕鬆地通過封裝實現它java.util.Calendar

試試下面的代碼

 import java.util.Calendar; //Import package 

     String month_order[]={"Select...","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; 
     Calendar cal = Calendar.getInstance(); 
     int month = cal.get(Calendar.MONTH) + 1; 
     int dom = cal.get(Calendar.DAY_OF_MONTH); 
     int doy=cal.get(Calendar.YEAR); 
     System.out.println("Current date: "+month_order[month]); 
     System.out.println("Current Month: "+dom); 
     System.out.println("Current year: "+doy); 
1

我一直在尋找完全一樣的答案。我必須向後兼容現有的日期格式,就像例子 - 「2013-04-12T13:38:48 + 02:00」一樣,我的其他限制是我不能使用任何開源庫Java 6提供了什麼。因此,在找不到解決方案之後,我想出了這種簡單的轉換技術,這很難看,但我想我在這裏發佈它以防有人需要快速而骯髒的解決方案。如果有人知道如何做得更好(有我提到的限制),請糾正我。

因此,產生所需格式的輸出:

private DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 

public GregorianCalendar stringToCalendar(String v) 
{ 
    // 22 is an idx of last ':', you can replace with v.lastIndex(':') to be neat 
    String simpleV = v.substring(0, 22).concat(v.substring(23)); 

    GregorianCalendar gc = (GregorianCalendar) df.getCalendar(); 

    gc.setTime(df.parse(simpleV)); 
    return gc; 
} 

public String calendarToString(GregorianCalendar v) 
{ 
    df.setCalendar(v); 

    String out = df.format(v.getTime()); 

    return out.substring(0, 22).concat(":").concat(out.substring(22)); // read above on '22' 
} 

就像我說的,這是遠遠不夠完善,但如果你使用「我沒有找到更好的東西..

0

z'或'Z',那麼你仍然無法確定你的時區的樣子。這取決於您的本地人和JVM版本將選擇哪個ISO8601版本。

時區始終爲格式「+02:00」的方法之一是請求它。使用以下日期格式:

DateTimeFormatter formatter = 
    new DateTimeFormatterBuilder() 
     .appendPattern("yyyy-MM-dd'T'HH:mm:ss") 
     .appendOffset("+HH:MM","Z") 
     .toFormatter(); 

並且使用它總是與ZonedDateTime類型。