如何打印带有时区但没有连字符的ZonedDateTime ?



我需要在URL中使用日期,因此日期不能包含任何符号,如连字符-,破折号/或冒号:

我认为20220615T160543Z是唯一合适的格式,但问题是它是在UTC,但我需要它在其他时区。

是否有像20220615T160543+2:00这样的东西,其中+2:00部分表示与UTC的时区偏移量?

如果是,我可以打印出ZonedDateTime对象吗?

我当前拥有的对象是

ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(date.getStartsOn().toInstant(), timezone);

提前感谢!

更新:

感谢所有的回复!

看起来我建议的方法是不可行的,因为它可能像20220615T160543-2:00,那里有一个连字符…

显然百分比编码是唯一的方法。

再次感谢!

如何打印带有时区但没有连字符的ZonedDateTime ?

像这样试试。

首先,使用问题中的示例创建一个ZonedDateTime

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssz");
ZonedDateTime zdt = ZonedDateTime.parse("20220615T160543Z",dtf);

然后用ZoneId打印它,如下所示,给出你的区域。

String dt = zdt.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssVV")
.withZone(ZoneId.of("Asia/Qatar")));
System.out.println(dt);

打印

20220615T190543Asia/Qatar

注意:不幸的是,ZoneId的一小部分包含连字符。您可以通过以下操作查看它们:

ZoneId.getAvailableZoneIds().stream()
.filter(str->str.contains("-"))
.forEach(System.out::println);

请这样写:

public class Main {
public static void main(String[] args) throws IOException {
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("US/Eastern"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHmmssXXX");
String formattedString = zonedDateTime.format(formatter);
System.out.println(formattedString);
}
}

相关内容

  • 没有找到相关文章

最新更新