我将时间戳作为流中的字符串获取,格式为"2016-12-08 05:44:48 <timezone like IST, UTC>"
和"2016-12-08 05:44:48 <timezone like +0000>"
我想将字符串转换为java.sql.Timestamp,所以我写了一个函数,如下所示
private static Timestamp convertToTimestamp(String s) throws ParseException{
String dateFormat = new String("yyyy-MM-dd hh:mm:ss z");
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date d = sdf.parse(s);
return new Timestamp(d.getTime());
}
当我跑步时
Timestamp t = convertToTimestamp("2016-12-08 05:44:48 UTC");
System.out.println(t);
输出为2016-12-08 11:14:48.0
它会自动转换为IST(可能是我的JVM默认值)。 如何进行更改以使输出时间不会更改为IST并与输入相同?
答案 0 :(得分:1)
解析日期时必须忽略时区
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
答案 1 :(得分:1)
Java java.util.Date
和java.sql.Timestamp
不存储时区。
他们始终以 UTC 跟踪时间。
在解析包含时区的日期字符串时,字符串会被正确解析并从给定时区调整为UTC。
在解析没有时区的日期字符串时,该字符串将在JVM的默认时区中解析并转换为UTC,除非已向日期解析器明确指定了另一个时区(通常为SimpleDateFormat
)。
当显示(也称为格式化)Date
/ Timestamp
时,除非另有说明,否则它将显示在JVM的默认时区中。
Date
/ Timestamp
个对象无法存储时区,因此他们无法记住原始时区的内容。
如果您需要,请使用Java 8&#39 {s} {/ 1}}。