如何将字符串时间戳转换为java.sql.Timestamp



我的字符串格式的时间戳为"星期四,23 Feb 2017 04:56:38 GMT"。那么,如何将此字符串时间戳转换为"2017-02-23 04:56:38.0"格式。我尝试链接java将字符串格式的日期转换为时间戳。但是在转换中面临错误。我的示例代码如下。

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:不可解析的日期:"星期四,23 Feb 2017 04:56:38 GMT" at java.text.DateFormat.parse(DateFormat.java:366(

只需更改 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
我知道

你现在已经让它工作了。无论如何,请允许我提及:您的格式内置为 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中使用这些类,请在ThreeTen Backport中获取它们。

相关内容

最新更新