2011-03-09 128 views
3

我有(yyyy-mm-ddTHH:mm + 0:0000)的時間格式..我需要將此格式轉換爲mm-dd-yyyy hh:mm am/pm使用java程序...任何人都可以幫助我做到這一點..事先預先...在java中解析日期和時間

+0

所以你有一個'字符串',並且你想把它轉換成另一個字符串? – Bozho 2011-03-09 12:35:56

+0

你能解釋更多嗎?字符串從哪裏來? XML?它在哪裏? Swing GUI? – Puce 2011-03-09 13:08:33

回答

2

看看java.text.SimpleDateFormat - 你需要兩個實例,一個用於解析,一個用於格式化。

9

嘗試是這樣的:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm+s:SSSS"); 
Date date = format.parse(dateString); 
format = new SimpleDateFormat("MM-dd-yyyy hh:mm a"); 
dateString = format.format(date); 
+1

在第二種格式中,它採用當前(本地)時區。如果您不想使用默認設置,請提供自己的設備。 – 2011-03-09 12:41:32

0

你可以做聖保羅和morja說什麼,或者只是使用String.substring(),因爲你的分析,要求非常簡單。

0

您應該從String中創建Data對象 - >使用適當的類(例如SimpleDataFormat),然後使用其他格式打印它。

1

見工作實例,此代碼片段:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
public class DateTimeAMPM { 
    public static void main(String[] args) throws ParseException { 

DateFormat inputDateFormatter = new SimpleDateFormat(
    "yyyy-MM-dd'T'HH:mm+s:SSSS"); 
Date date = inputDateFormatter.parse("2011-11-11T22:33+0:400"); 
String outputDateFormatter = "MM-dd-yyyy HH:mm:ss a"; 
SimpleDateFormat sdf = new SimpleDateFormat(outputDateFormatter); 
System.out.println("Date: " + sdf.format(date)); 
} 

}

2

這裏的現代答案。 SimpleDateFormat是在2011年問題被問及時的正確答案,但現在已不復存在。舊的課程結果很麻煩,所以最終他們的替代品在2014年初出現。

我對您的格式中的一些細節有點困惑。

  • yyyy-mm-ddTHH:mm+0:0000看起來有點像一個ISO 8601偏移日期時間,但隨後+0:0000應該從UTC偏移。我猜測它可能已被作爲h:mmss格式的抵消,但它是非標準的,並且我從未見過其他地方。
  • 您似乎在以小寫字母am/pm的方式提問。這也是非標準的,並且不是標準類內置的。

我建議:

DateTimeFormatter sourceFormat 
      = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm'+0:0000'"); 
    DateTimeFormatter targetFormat 
      = DateTimeFormatter.ofPattern("MM-dd-uuuu hh:mm a", Locale.ENGLISH); 

    String sourceTime = "2017-07-05T20:31+0:0000"; 
    String convertedTime = LocalDateTime.parse(sourceTime, sourceFormat) 
      .format(targetFormat) 
      .toLowerCase(Locale.ENGLISH); 

    System.out.println(convertedTime); 

這將打印

07-05-2017 08:31 pm 

我發現它最安全只是需要在輸入文字+0:0000,不是要解釋它。爲了生成小寫的pm,我在格式化後將整個字符串轉換爲小寫字母。有一個不同的技巧in this answer

試圖要與小時,分鐘和秒的偏移更靈活,使他們的感覺可能是:

sourceTime = sourceTime.replaceFirst("(\\d:\\d{2})(\\d{2})$", "0$1:$2"); 
    String convertedTime = OffsetDateTime.parse(sourceTime) 
      .format(targetFormat) 
      .toLowerCase(Locale.ENGLISH); 

replaceFirst轉換0:000000:00:00,當被+ preceeded或-與符合ISO 8601膠印。這也可以與其他偏移量一起使用(只要小時是一位數字;您可能需要依次嘗試一位數字和兩位數字)。在具體的代碼中,我們仍然忽略格式化時的偏移量,但如果需要它可以用於其他目的。

DateTimeFormatter,LocalDateTimeOffsetDateTime是JSR-310的一部分。它們是在Java 8及更高版本中構建的。您也可以通過ThreeTen Backport在Java 6和7中使用它們。還有一個特定版本的Android的backport,ThreeTenABP