Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat解析正在根据时区更改时间_Java_Datetime_Timestamp - Fatal编程技术网

Java SimpleDataFormat解析正在根据时区更改时间

Java SimpleDataFormat解析正在根据时区更改时间,java,datetime,timestamp,Java,Datetime,Timestamp,我在流中以字符串形式获取时间戳,它们的格式为“2016-12-08 05:44:48”和“2016-12-08 05:44:48” 我想将字符串转换为java.sql.Timestamp,因此我编写了如下函数 private static Timestamp convertToTimestamp(String s) throws ParseException{ String dateFormat = new String("yyyy-MM-dd hh:mm:ss z"); Sim

我在流中以字符串形式获取时间戳,它们的格式为
“2016-12-08 05:44:48”
“2016-12-08 05:44:48”

我想将字符串转换为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且与输入时间相同?

解析日期时必须忽略时区

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Java的,不存储时区

他们总是以UTC来跟踪时间

解析包含时区的日期字符串时,将正确解析该字符串,并将其从给定时区调整为UTC

在解析不带时区的日期字符串时,该字符串将在JVM的默认时区中解析并转换为UTC,除非另一个时区已明确指定给日期解析器(通常)

除非另有规定,否则当显示(也称为格式化)一个
日期
/
时间戳
时,它将显示在JVM的默认时区中

日期
/
时间戳
对象无法存储时区,因此它们无法记住原始时区是什么

如果需要,请使用Java8的
ZoneDateTime