提问人:nilsi 提问时间:4/14/2023 最后编辑:nilsi 更新时间:4/17/2023 访问量:284
使用时区打印 kotlinx 日期时间
Print kotlinx datetime with timezone
问:
我通过调用 kotlinx.datetime 创建一个 Instant 。Clock.System.now()
我想将其转换为具有添加时区的字符串。
所以它看起来像这样.(国际标准化组织-8601)2023-01-06T00:00:00.000+01:00
实现这一目标的最佳方法是什么?
答:
-1赞
MexiCano
4/15/2023
#1
用:
静态 val RFC_1123_DATE_TIME: DateTimeFormatter!
例:
使用与RFC_1123_DATE_TIME相同的格式创建
DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseLenient()
.optionalStart()
.appendText(DAY_OF_WEEK, dow)
.appendLiteral(", ")
.optionalEnd()
.appendValue(DAY_OF_MONTH, 1, 2, SignStyle.NOT_NEGATIVE)
.appendLiteral(' ')
.appendText(MONTH_OF_YEAR, moy)
.appendLiteral(' ')
.appendValue(YEAR, 4) // 2 digit year not handled
.appendLiteral(' ')
.appendValue(HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2)
.optionalEnd()
.appendLiteral(' ')
// difference from RFC_1123_DATE_TIME: optional offset OR zone ID
.optionalStart()
.appendZoneText(TextStyle.SHORT)
.optionalEnd()
.optionalStart()
.appendOffset("+HHMM", "GMT")
// use the same resolver style and chronology
.toFormatter().withResolverStyle(ResolverStyle.SMART).withChronology(IsoChronology.INSTANCE);
结果是:
With this formatter, I can parse the inputs:
System.out.println(Instant.from(fmt.parse("Mon, 21 Aug 2017 15:00:00 EST")));
System.out.println(Instant.from(fmt.parse("Sun, 20 Aug 2017 00:30:00 UT")));
0赞
nilsi
4/17/2023
#2
我最终为此创建了一个扩展函数并使用了格式化程序。
// 2023-04-17T10:16:45.205+02:00
fun Instant.formatTimestampWithZoneOffset(): String =
DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
.withZone(ZoneId.of("Europe/Stockholm"))
.format(this.toJavaInstant())
评论