2017-04-07 89 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中。