当前位置: 首页 > 知识库问答 >
问题:

如何打印带时区但不带连字符的ZoneDateTime?[已关闭]

胡高朗
2023-03-14

想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。

我需要在URL中使用日期,因此日期不能包含连字符、破折号或冒号等符号:。

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

是否有类似20220615T160543 2:00的内容,其中2:00部分表示与UTC的时区偏移?

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

我目前拥有的对象是

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

提前感谢!

更新:

感谢所有回复!

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

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

再次感谢!

共有2个答案

汤飞翮
2023-03-14

请使用以下内容:

    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);
    }
}
隆芷阳
2023-03-14

如何打印带有时区但没有连字符的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);

 类似资料:
  • 问题内容: 如果您有一个带有unicode字符的字符串,则可以打印它,并获得未转义的版本: 但是如果我们有一个包含上面字符串的列表并打印出来: 您仍然会获得转义的字符序列。您如何才能使列表的内容不被转义,这可能吗?像这样: 另外,如果字符串是类型,那么您如何与上述相同? 问题答案: 打印字符串时,将获得对象方法的输出- 在这种情况下,该字符串不带引号。列表的方法不同,它创建一个包含打开和关闭的字符

  • 我正在开发一个文本编辑器,我的下一个目标是在打印机上打印书面文本(而不是sysout)。 我试了很多次,它起作用了,但是换行符被忽略了。 我创建了一个新的图形并设置了字体。然后我把写在编辑器窗口中的文本。iPosX 你们有什么想法,我可以打印整个字符串考虑到行中断? 提前感谢!

  • 问题内容: 使用时,Double将添加逗号(5143打印为5,143)。如何禁用逗号? 问题答案: 您的问题属于Rorick正确指出的语言环境。但是,您应该查看DecimalFormat类,以防更改Locale意味着弄乱了所有东西。 查看NumberFormat类,以处理千位分隔符。因为看来您的情况是关于千位分隔符。

  • 问题内容: 我从plist中的字典中加载了一个值,但是当我将其打印到控制台时,它会打印:Optional(Monday Title),而不仅仅是“ Monday Title”。 如何在打印时摆脱值的Optional()? 问题答案: 摆脱的一种方法是使用感叹号: 但是,只有在确定存在该值的情况下,才应这样做。另一种方法是解包和使用条件,例如: 将该程序粘贴到runswiftlang中进行演示:

  • 问题内容: 在Hibernate中是否可以用实际值而不是问号打印生成的SQL查询? 如果Hibernate API无法实现,您将如何建议使用实值打印查询? 问题答案: 您需要为以下类别启用日志记录: -设置为在执行所有SQL DML语句时记录它们 -设置为记录所有JDBC参数 因此,log4j配置如下所示: 第一个等效于legacy 属性,第二个则 打印绑定参数。 另一个解决方案(基于非hiber

  • 问题内容: 在Hibernate中是否可以用实际值而不是问号打印生成的SQL查询? 如果Hibernate API无法实现,您将如何建议使用实值打印查询? 问题答案: 您需要为以下类别启用日志记录: -设置为在执行所有SQL DML语句时记录它们 -设置为记录所有JDBC参数 因此,log4j配置如下所示: 第一个等效于 属性,第二个则打印绑定参数。 另一个解决方案(基于非hibernate)是使