【发布时间】:2018-12-30 21:59:35
【问题描述】:
我在将 json 文件中的日期转换为时间戳时遇到问题。当小时 = 12 时,返回的时间戳不正确。
Java 版本 1.8.0_171
使用下面的代码 sn-p,我希望输出是
2017-07-19 07:43:42.0
2017-07-18 08:43:42.0
2017-07-19 09:43:42.0
相反,我得到了
2017-07-19 07:43:42.0
2017-07-18 20:43:42.0
2017-07-19 09:43:42.0
我在 2 台机器上尝试过,并让同事运行它,结果相同 任何人都可以看到问题所在;我可能正在盯着它看
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
public class TimestampTest {
public static void main(String[] args) {
String input = "2017-07-19T11:43:42.000+0000";
System.out.println(stringToTimestamp(input));
input = "2017-07-19T12:43:42.000+0000";
System.out.println(stringToTimestamp(input));
input = "2017-07-19T13:43:42.000+0000";
System.out.println(stringToTimestamp(input));
}
private static Timestamp stringToTimestamp(String input) {
try {
if(StringUtils.isBlank(input)) {
return null;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ",
Locale.getDefault());
java.util.Date parsedDate = dateFormat.parse(input);
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
return timestamp;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
【问题讨论】:
-
docs.oracle.com/javase/7/docs/api/java/text/…: hh 是上午/下午 (1-12) 中的小时,但您的输入字符串显然是 24 小时格式,您应该改用 HH。
-
我建议你避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 的表现要好得多。
标签: java timestamp simpledateformat