How to set Z as timezone in SimpleDateFormat
代码示例:
1 2 3 4 | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); System.out.println(dateFormat.getTimeZone()); System.out.println(dateFormat.parse(time)); // dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); |
我不想使用评论部分。
区域应根据我在输入字符串中给出的
1 |
当前机器区域为:
1 2 3 | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); String time ="2018-04-06 18:40:00 IST"; dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); |
上面运行正常,但我不想明确设置区域。 应根据IST选择我输入的时间字符串。
"I don't want to set zone explicitly"
很抱歉让您失望,但
在特定情况下,有些缩写可能有时会起作用,但通常是以任意和无证的方式,你不能真正依赖它。引用javadoc:
For compatibility with JDK 1.1.x, some other three-letter time zone IDs (such as"PST","CTT","AST") are also supported. However, their use is deprecated because the same abbreviation is often used for multiple time zones (for example,"CST" could be U.S."Central Standard Time" and"China Standard Time"), and the Java platform can then only recognize one of them.
由于时区缩写的模糊和非标准特征,用
"It should be set to based on Z"
我不太确定这意味着什么,但无论如何......
如果要使用
1 2 3 4 5 6 7 8 9 10 | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); String time ="2018-04-06 18:40:00 IST"; dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); // parse the input Date date = dateFormat.parse(time); // output format, use UTC SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssX"); outputFormat.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(outputFormat.format(date)); // 2018-04-06 13:10:00Z |
也许如果您准确指定了您正在获得的输出(使用实际值,输出的一些示例)以及预期输出,我们可以为您提供更多帮助。
1 2 3 4 5 |
在我的Java 8上打印出来
Asia/Jerusalem
显然,IST被解释为以色列标准时间。在其他具有其他设置的计算机上,您将获得例如欧洲/都柏林的爱尔兰夏令时或亚洲/加尔各答的印度标准时间。在任何情况下,时区都来自与格式模式字符串中的模式字母(小写)
如果你想在太频繁的歧义情况下控制时区的选择,你可以用这种方式构建你的格式化程序(从这个答案中窃取的想法):
1 2 3 4 5 | DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("uuuu-MM-dd HH:mm:ss") .appendZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Asia/Kolkata"))) .toFormatter(Locale.ENGLISH); |
现在输出是
Asia/Kolkata
我在长期过时且臭名昭着的
链接:Oracle教程:日期时间,解释如何使用