英文:
SimpleDateFormat question for timezone offset +AA:BB
问题
我目前正在使用以下的SimpleDateFormat模式:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss,SSSXXX";
这个模式运行良好,然而一些树莓派的Java实现无法正确识别它:
timestamp 2020-01-21T09:41:45,434Z
在大多数情况下,这不会成为问题,但对于一些树莓派来说,偏移量存在问题;我不希望出现这种情况。是否有另一种具有相同偏移量格式(+/-HH:mm)的替代模式可行?我尝试过各种模式,但似乎没有产生相同的输出。
我还使用了以下工具来搜索这样的模式:https://javadevtools.com/simpledateformat,但没有结果。
注意:此格式的示例输出是1997-07-16T19:20:30,45+01:00
,偏移量中有一个冒号。
英文:
I am currently using the following SimpleDateFormat pattern:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss,SSSXXX";
This works fine, however some raspberry Pi java implementations don't recognize it properly:
timestamp 2020-01-21T09:41:45,434Z
In most cases, this won't be an issue, however the offset is buggy for some raspberry PIs; I don't want that. Is there an alternative pattern with the same offset format (+/-HH:mm) that could work? I've tried all kinds of patterns, but none seem to produce the same output.
I also used the following tool to search for such a pattern: https://javadevtools.com/simpledateformat , though it was fruitless.
NOTE: An example output of this format is 1997-07-16T19:20:30,45+01:00
, with a colon in the offset.
答案1
得分: 2
以下是您要翻译的内容:
如果您正在使用 java.time
,尤其是两个类 java.time.OffsetDateTime
(模式符号在此JavaDoc中有解释)和 java.time.format.DateTimeFormatter
,您或者您的树莓派将能够正确解析该时间戳(其格式很奇怪,使用逗号将秒的小数部分与秒数分开)。
以下示例解析了您的 timestamp
并输出默认格式:
public static void main(String[] args) {
String timestamp = "1997-07-16T19:20:30,45+01:00";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss[,SSS]xxx");
OffsetDateTime odt = OffsetDateTime.parse(timestamp, dtf);
System.out.println(odt);
}
输出:
1997-07-16T19:20:30.450+01:00
英文:
If you were using java.time
, especially the two classes java.time.OffsetDateTime
(pattern symbols are explained in this JavaDoc) and java.time.format.DateTimeFormatter
, you or your Raspberry Pi would be able to correctly parse the timestamp (which has a strange format using a comma to separate fractions of second from the seconds).
The following example parses your timestamp
and outputs the default format:
public static void main(String[] args) {
String timestamp = "1997-07-16T19:20:30,45+01:00";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss[,SSS]xxx");
OffsetDateTime odt = OffsetDateTime.parse(timestamp, dtf);
System.out.println(odt);
}
Output:
1997-07-16T19:20:30.450+01:00
答案2
得分: 0
我确认这不是一个树莓派问题。我将本地时区切换为UTC,并运行了以下示例:
long current = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss,SSSXXX");
Date date = new Date(current);
String parsed = format.format(date);
System.out.println(parsed);
2020-08-31T15:05:27,872Z
在 Windows 10 上出现了 Z。我错过了ISO规范的那部分内容。看起来我必须为这种情况找到解决方法 :)。谢谢大家!
英文:
I confirm that this is not a Pi issue. I switched my local time zone to UTC and ran the following example:
long current = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss,SSSXXX");
Date date = new Date(current);
String parsed = format.format(date);
System.out.println(parsed);
2020-08-31T15:05:27,872Z
And the Z appeared, on Windows 10. I have missed that part of the ISO spec. It seems I have to workaround my tests for this situation :). Thanks everyone!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论