如何将毫秒为单位的字符串值转换为"2006-01-02T15:04:05Z07:00"
格式的日期字符串?(用Z表示偏移量)
发布于 2018-09-19 11:12:25
我相信"2006-01-02T15:04:05Z07:00"
是Golang指定日期-时间格式的方式。更准确地说,是ISO 8601格式。例如,实际的格式化字符串应该类似于2018-09-19T00:26:42-05:00
。因此,请使用DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX")
或仅使用DatetimeFormatter.ISO_OFFSET_DATE_TIME
(在格式化程序格式化字符串之后不要进行替换)。
原始答案
这分为两个步骤:
将毫秒字符串(我假设从1970-01-01纪元开始)转换为Instant
.
Instant
到所需的时区,并对其进行格式化。偏移量有正号或负号,偏移量的标准格式选项包括-
或+
(不同的是,偏移量零有时写为没有符号的Z
)。
ZoneId zone = ZoneId.of("America/Denver");
DateTimeFormatter firstShotFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss'Z'xxx");
String milliseconds = "1136239445000";
Instant pointInTime = Instant.ofEpochMilli(Long.parseLong(milliseconds));
String firstShot = pointInTime.atZone(zone).format(firstShotFormatter);
// Offset should be negative
if (firstShot.contains("Z-")) {
// Remove minus sign from formatted offset
String result = firstShot.replace("Z-", "Z");
System.out.println("Formatted string: " + result);
} else {
throw new IllegalStateException(
"Don’t know how to format a positive offset from UTC");
}
格式字符串: 2006-01-02T15:04:05Z07:00
我初步猜测,您对Z07:00
的偏移量是指北美山区时间,即1月份的偏移量-07:00。请查收。我不知道如何处理正偏移量,所以我的代码检查它不会发生。
它使用日期和时间部分之间的特征T
对ISO8601进行重新采样。但据我所知,ISO8601的偏移量要么是Z
(表示零),要么是有符号的,例如-07:00
,而不是这两者的混合。您可能需要检查是否可以说服格式化字符串的接收者接受直接的ISO 8601字符串。我会发现这一点要清晰得多,最终对所有各方来说都更容易理解。
链接
https://stackoverflow.com/questions/52394812
复制相似问题