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

将即时格式设置为字符串

公西天逸
2023-03-14

我试图使用新的Java8time-API和一个模式将即时格式化为字符串:

Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);

使用上面的代码,我得到了一个异常,它抱怨一个不受支持的字段:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
    at java.time.Instant.getLong(Instant.java:608)
    at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
    ...

共有1个答案

孟英叡
2023-03-14

要格式化即时需要时区。没有时区,格式化程序不知道如何将即时转换为人工日期-时间字段,因此引发异常。

时区可以使用withzone()直接添加到格式化程序中。

DateTimeFormatter formatter =
    DateTimeFormatter.ofLocalizedDateTime( FormatStyle.SHORT )
                     .withLocale( Locale.UK )
                     .withZone( ZoneId.systemDefault() );

如果您特别想要一个没有显式时区的ISO-8601格式(正如OP所要求的那样),并且时区隐式UTC,那么您需要

DateTimeFormatter.ISO_LOCAL_DATE_TIME.withZone(ZoneId.from(ZoneOffset.UTC))
Instant instant = Instant.now();
String output = formatter.format( instant );
System.out.println("formatter: " + formatter + " with zone: " + formatter.getZone() + " and Locale: " + formatter.getLocale() );
System.out.println("instant: " + instant );
System.out.println("output: " + output );
formatter: Localized(SHORT,SHORT) with zone: US/Pacific and Locale: en_GB
instant: 2015-06-02T21:34:33.616Z
output: 02/06/15 14:34
 类似资料:
  • 问题内容: 如果我想使格式化后的字符串动态可调,则可以从 至 但是,这里的字符串连接似乎很麻烦。还有其他简化方法吗? 问题答案: 您可以从参数列表中获取填充值: 您甚至可以动态插入填充值:

  • 注:要在 Windows XP 中启用对简体中文的 GB18030 字体支持,请参阅 Illustrator CS4\简体中文 \小工具 \可选扩展 \GB18030 文件夹中的自述文件。 显示亚洲文字选项 默认情况下, Illustrator 隐藏 “字符 ”面板、 “段落 ”面板、 “OpenType”面板和 “文字 ”菜单中的亚洲文字选项。 1选择 “编辑 ”>“首选项 ”>“文字 ”(Wi

  • 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 After Effects 提供了各种创意选项,用于文本的格式化和自定义。使用“字符”面板设置字符格式。如果选择了文本,您在“字符”面板中所做的更改仅影响选定文本。如果没有选择文本,您在“字符”面板中所做的更改将影响所选文本图层和文本图层的选定源文本关键帧(如果存在)。如果

  • 可以在输入字符之前设置文字属性,也可以重新设置这些属性,以更改文字图层中所选字符的外观。 在设置各个字符的格式之前,必须先选择这些字符。可以在文字图层中选择一个字符、一系列字符或所有字符。 注意:要快速使用与文本相关的 Photoshop 功能,请参阅将字词添加到图片。 选择字符 要选择一种文字图层,请执行下列操作之一: 选择“移动”工具 并在画布上双击文字图层。 选择横排文字工具或竖排文字工具。

  • 问题内容: 我想知道是否有可能在Java中使用String.format方法给出一个在零之前的整数? 例如: 1将变为001 2将变为002 … 11将变为011 12将变为012 … 526将保留为526 … 目前,我尝试了以下代码: 不幸的是,它在数字之前带有3个空格。可以在数字前加零吗? 问题答案: 使用格式说明为整数。的装置,该数目将是零填充,如果它是少于三个(在这种情况下)位。 有关其他

  • 问题内容: 我正在尝试以 2015-08-20T08:26:21.000Z* 到 2015-08-20T08:26:21Z 的格式创建字符串 * 我知道可以使用某些String拆分技术来做到这一点,但是我想知道是否有一种优雅的解决方案(只需最少的代码更改)。 以上都是时间字符串,我需要的最后一个是ISO 8601中的Date。http://tools.ietf.org/html/rfc3339#s