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