我需要在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);
}
}