如何将String时间戳转换为java.sql.Timestamp?

时间:2017-04-07 11:14:52

标签: java datetime timestamp

我的时间戳为String格式为“星期四,2017年2月23日04:56:38 GMT”。那么,如何将此字符串时间戳转换为“2017-02-23 04:56:38.0”格式。 我尝试过链接java converting date in string format to 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:Unparseable date:“Thu,2017年2月23日04:56:38 GMT”     在java.text.DateFormat.parse(DateFormat.java:366)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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,我认为)更加程序员友好。我每次使用它时都会继续讨论示例(当然,当我在Stack Overflow上回答有关使用旧类时的棘手错误的问题时)。

java.time是Java 8中的标准。如果要使用Java 6或7中的类,请在the ThreeTen Backport中获取它们。