首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Instant格式设置为字符串

将Instant格式设置为字符串
EN

Stack Overflow用户
提问于 2014-08-10 21:36:26
回答 5查看 296.2K关注 0票数 307

我正在尝试使用新的java 8 time-api和模式将Instant格式化为字符串:

代码语言:javascript
运行
复制
Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);

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

代码语言:javascript
运行
复制
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
    at java.time.Instant.getLong(Instant.java:608)
    at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
    ...
EN

回答 5

Stack Overflow用户

发布于 2018-02-03 18:50:12

代码语言:javascript
运行
复制
public static void main(String[] args) {

    DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
            .withZone(ZoneId.systemDefault());

    System.out.println(DATE_TIME_FORMATTER.format(new Date().toInstant()));

}
票数 62
EN

Stack Overflow用户

发布于 2019-03-08 06:58:25

代码语言:javascript
运行
复制
DateTimeFormatter.ISO_INSTANT.format(Instant.now())

这使您不必转换为UTC。但是,其他一些语言的时间框架可能不支持毫秒,所以您应该这样做

代码语言:javascript
运行
复制
DateTimeFormatter.ISO_INSTANT.format(Instant.now().truncatedTo(ChronoUnit.SECONDS))
票数 42
EN

Stack Overflow用户

发布于 2014-12-13 00:27:38

Instant类不包含区域信息,它只存储从UNIX纪元开始的毫秒时间戳,即来自UTC的1070年1月1日。因此,格式化程序不能打印日期,因为总是打印特定时区的日期。您应该将时区设置为格式化程序,然后一切都会很好,如下所示:

代码语言:javascript
运行
复制
Instant instant = Instant.ofEpochMilli(92554380000L);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.UK).withZone(ZoneOffset.UTC);
assert formatter.format(instant).equals("07/12/72 05:33");
assert instant.toString().equals("1972-12-07T05:33:00Z");
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25229124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档