Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 时区转换器_Java_Date_Timezone - Fatal编程技术网

Java 时区转换器

Java 时区转换器,java,date,timezone,Java,Date,Timezone,我的时区转换器有问题。我使用代码 for (int i = 0; i < data.size(); i++) { try { String time = (String) data.get(i).get("time_utc_8"); time = time.replace('+', '-'); String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX";

我的时区转换器有问题。我使用代码

for (int i = 0; i < data.size(); i++) {
        try {
            String time = (String) data.get(i).get("time_utc_8");
            time = time.replace('+', '-');

            String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX";
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            TimeZone tz = TimeZone.getTimeZone("UTC+8");
            sdf.setTimeZone(tz);
            Date dateTime = sdf.parse(time);

            String pattern_2 = "yyyy-MM-dd HH:mm:ss.SSSSSS";
            SimpleDateFormat sdf_2 = new SimpleDateFormat(pattern_2);
            String d = sdf_2.format(dateTime);

            data.get(i).put("time_utc_8", d);

            // System.out.println(data.get(i).get("time"));

        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
解析和更改时区

这是我的示例输入:

2016-06-26T16:32:31.654120+00:00

我得到了输出:

2016-06-27 00:43:25.000120

但正确的输出必须是:

2016-06-27 00:32:31.654120


如何解决此问题?

首先,请查看:S模式表示毫秒字段,其最大值为999


要将6位数字解析为秒的一小部分,如果使用java>=8或for java=8或org.threeten.bp和org.threeten.bp.format for java,则可以使用新的java.time类。我强烈建议不要使用旧的java.util.Date。您应该在java.time包中查找最适合您需要的类。@JoeC因此,问题是java.util.Date?@Zi yanTseng java.util.Date已经过时,并且有很多错误:-它正在被新的API所取代,我在下面的回答中展示了如何使用它。谢谢,我将研究这两个API,这对我真的很有帮助
// parser (format with 6 digits in fraction of second)
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX");
// parse input, use UTC+8 (ZoneOffset.ofHours(8))
ZonedDateTime dt = ZonedDateTime.parse("2016-06-26T16:32:31.654120+00:00", parser)
    .withZoneSameInstant(ZoneOffset.ofHours(8));

// formatter for output, using your format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
System.out.println(formatter.format(dt)); // 2016-06-27 00:32:31.654120