【发布时间】:2020-09-24 23:52:13
【问题描述】:
我收到了格式为“yyyy-MM-dd'T'HH:mm:ssXXX”的字符串
例如“2020-06-01T11:04:02+02:00”
我想把它转换成“yyyy-MM-dd'T'HH:mm:ss:SSSZ”
例如“2020-06-01T11:04:02.000+0200”
我实际上不知道时区。它应该从字符串的最后一部分中获取。
我已经尝试过,但是当我将字符串转换为日期(即 IST)时,它占用了我的本地时间和时区。
SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
//sd1.setTimeZone(TimeZone.getTimeZone("PST"));
Date dt = sd1.parse("2020-06-01T11:04:02+02:00");
SimpleDateFormat sd2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSSZ");
System.out.println(sd2.format(dt));
输出:
2020-06-01T14:34:02:000+0530
只有日期是正确的,时间和时区已经改变。
我知道我做错了,如果有人能告诉我该怎么做,那将非常有帮助。 感谢您的帮助。
【问题讨论】:
-
Date Time 教程
-
这能回答你的问题吗? SimpleDateFormat parse loses timezone
-
你为什么使用
Date和SimpleDateFormat? Java 8 具有java.time以及许多改进的替代方案。 -
@rph 不,那个问题对我没有帮助
-
[1] 您对
sd1.parse("2020-06-01T11:04:02+02:00")的调用中的 "+02:00" 不正确,但被忽略而不是视为无效。parse()的 Javadoc 声明 “该方法可能不会使用给定字符串的整个文本”,并且时区值对于Date没有意义。通过更改它的一些其他值(例如 "+09:00")来验证这一点,看看它没有效果。 [2] 请更新您的问题以澄清您想要/期望的一些示例输入的确切输出。