我的字符串格式的时间戳为"星期四,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
(。上面只是一个非常简单的例子,说明它们比旧的类Timestamp
和SimpleDateFormat
(我认为来自Java 1.0或1.1(对程序员更友好。每次使用它们时,我都会不断遇到示例(当然,当我回答有关使用旧类的棘手错误的问题时(。
java.time
是Java 8的标准配置。如果你想在Java 6或7中使用这些类,请在ThreeTen Backport中获取它们。