2017-04-07 99 views
-1

我的字符串格式的時間戳記爲「2017年2月23日星期四04:56:38 GMT」。那麼,如何將此字符串時間戳轉換爲「2017-02-23 04:56:38.0」格式。我試過鏈接java converting date in string format to timestamp。但面臨轉換錯誤。 我的示例代碼如下。如何將字符串時間戳轉換爲java.sql.Timestamp?

String str = "Thu, 23 Feb 2017 04:56:38 GMT"; 


    SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss a"); 
    Date date = null; 
    try { 
     date = (Date) sdf1.parse(str); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    System.out.println("Date Object:" + date); 
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    System.out.println("Formatted Date:" + sdf2.format(date)); 

錯誤:java.text.ParseException:無法解析的日期: 「星期四,2017年2月23日四點56分38秒GMT」 在java.text.DateFormat.parse(DateFormat.java:366)

+0

[SimpleDateFormatter](https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html)> a | Am/pm marker |文字| PM,所以你使用AM/PM標記來解析時區... – Fildor

+0

@Fildor,你是對的。在simpleDateformat中將a更改爲z後,它工作正常。謝謝 – Jay

+0

請參閱[我的答案](http://stackoverflow.com/a/39281606)上的重複問題。 –

回答

2

只要改變SDF1格式

SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z"); 

這裏z意味着

Date or Time Component Presentation  Examples 
Time zone    General time zone Pacific Standard Time; PST; GMT-08:00 
2

我我知道你現在已經開始工作了。無論如何,請允許我提及:您的格式內置爲java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME。因此,解析您的字符串是一個班輪:

Instant i = OffsetDateTime.parse(str, DateTimeFormatter.RFC_1123_DATE_TIME).toInstant(); 

既然你問了你的標題java.sql.Timestamp,我在想,你可能需要這個數據庫?現代JDBC驅動程序(版本4.2或更高版本)應該能夠直接接受Instance。如果你沒那麼幸運,它仍然很容易:

Timestamp ts = Timestamp.from(i); 

我在java.time包使用一些類(含分裝java.time.format)。以上只是一個非常簡單的例子,它們比舊的類TimestampSimpleDateFormat(我認爲來自Java 1.0或1.1)的程序員更友好。我每次使用它們時都會保持會議示例(當然,當我使用堆棧溢出來回答關於使用舊類時存在的棘手錯誤的問題時)。

java.time在Java 8中是標準的。如果要使用Java 6或7中的類,請將它們置於the ThreeTen Backport中。

相關問題