2015-02-23 49 views
0

我必須按照以下時間字符串:「23.02.2015 14:06:30 +01:00」來打印。打印結果應爲:「23.02.2015 :06:30」。 經過一番研究,我發現了一個我不認爲是個好主意的解決方案。 Perhabs中的任何一個人對如何做到這一點都有一些結論?轉換應該用joda-time完成。 在此先感謝。使用joda時間轉換時間字符串

**由於解釋提及的dublicate的差異所致的更新: 我的第一種方法就像在Java : how to add 10 mins in my Time中提到的那樣手動添加或刪除小時。我試圖強調的是,我不認爲這是一個好主意,因爲如果輸入字符串改變(可能出現錯誤的空間很大),這可能會很危險。所以我想知道如果喬達時間有一些功能可以讓我的生活更輕鬆,而且目前爲止我沒有注意到。

+3

您的解決方案是哪一個?你爲什麼不認爲這是一個好主意? – 2015-02-23 13:34:29

+0

「23.02.2015 14:06:30 +01:00」與「23.02.2015 15:06:30 +02:00」同時(即時),所以你想操作時區偏移嗎?你還知道爲了得到UTC時間而必須減去正的偏移量嗎? – 2015-02-23 13:47:01

+0

_updated我的問題,並添加了一些解釋,我到目前爲止做了什麼_ – ccDict 2015-02-24 12:26:55

回答

1

您可以使用DateTime class plusxx() methods;

public static void main(String[] args) { 
     String dateTime = "23.02.2015 14:06:30 +01:00"; 
     DateTimeFormatter dtf = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss Z"); 

     DateTime jodatime = dtf.parseDateTime(dateTime); 
     DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss"); 
     System.out.println(dtfOut.print(jodatime)); 


     DateTime resultDateTime = jodatime.plusHours(1); 
     System.out.println(dtfOut.print(resultDateTime)); 
    } 

而輸出是;

23.02.2015 08:36:30 
23.02.2015 09:36:30 

結果日期沒有錯,關於這個問題的更多信息請看here

對於固定日期,我添加了時區withZone(DateTimeZone.forID("Europe/Prague");

public static void main(String[] args) { 
     String dateTime = "23.02.2015 14:06:30 +01:00"; 
     DateTimeFormatter dtf = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss Z"); 

     DateTime jodatime = dtf.withZone(DateTimeZone.forID("Europe/Prague")).parseDateTime(dateTime); 
     DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss"); 
     System.out.println(dtfOut.withZone(DateTimeZone.forID("Europe/Prague")).print(jodatime)); 


     DateTime resultDateTime = jodatime.plusHours(1); 
     System.out.println(dtfOut.withZone(DateTimeZone.forID("Europe/Prague")).print(resultDateTime)); 
    } 

而且輸出是;

23.02.2015 14:06:30 
23.02.2015 15:06:30 
+0

嗨,謝謝你的帖子。所以沒有其他解決方案,然後手動添加/刪除小時? – ccDict 2015-02-24 12:31:02

+0

這種方法的常見用法是使用plusxxx方法,當然你可以嘗試其他方法,但我認爲這是最簡單的方法。 – 2015-02-24 12:36:48

+0

好的,謝謝你的回答。 – ccDict 2015-02-24 12:38:40

1

我也注意到這種奇怪的情況,當工作和轉換爲Joda Time。我所做的是從Joda Time像這樣只。減去1小時:

DateTime dt1 = new DateTime([YOUR_JAVA.UTIL.DATE]); 

Date result = new Date(dt1).minus(Seconds.seconds(3600)).getSeconds() * 1000);