首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8 ZonedDateTime格式日期

Java 8 ZonedDateTime格式日期
EN

Stack Overflow用户
提问于 2020-06-01 20:19:31
回答 1查看 869关注 0票数 1

我正在写一段代码,以获得英国夏季时间的最新日期。我被困在转换日期以期望的格式使用下面的代码。

代码语言:javascript
复制
ZoneId zid = ZoneId.of("Europe/London");      
ZonedDateTime lt = ZonedDateTime.now(zid); 


// create a formatter
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE;
// apply format()
String value = lt.format(formatter);

System.out.println("value ="+value);

我得到的输出值=2020-06-01+02:00,这与编写的代码一样好。但是我需要格式01-JUN-20的输出。

我应该用什么格式化程序来达到这个目的呢?另外,“欧洲/伦敦”在DST期间也会给出适当的日期吗?请帮我回答以上两个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-01 22:44:43

tl;dr

代码语言:javascript
复制
ZonedDateTime
.now(
    ZoneId.of( "Europe/London" )
)
.format(
    DateTimeFormatter
    .ofPattern( "dd-MMM-uu" )
    .withLocale( Locale.UK )
)
.toUpperCase(
    Locale.UK
)

看这个在IdeOne.com现场运行的代码

01-6月20日

详细信息

你问:

“欧洲/伦敦”在DST期间会给出适当的日期吗?

是的,你的代码是正确的。将ZoneId传递给ZonedDateTime.now确实说明了任何时间上的异常,包括夏令时(DST)的异常。其结果是一个日期和时间,在该地区的人们看到时,他们看到日历&时钟在他们各自的墙上。

你可能会发现,在UTC中看到同样的时刻是很有趣或有用的,这与协调世界时的零小时-分-秒相抵消。通过调用Instant来提取toInstant对象。

你说过:

但我想要01-JUN-20格式的输出

定义一个自定义格式模式以匹配所需的输出。实例化DateTimeFormatter对象。

指定一个Locale对象,以确定命名和缩写月份名称时的人类语言和文化规范。

代码语言:javascript
复制
Locale locale = Locale.UK ;  // Or Locale.US, etc.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uu" ).withLocale( locale ) ;
String output = myZonedDateTime.format( f ) ;

我不知道如何在DateTimeFormatter格式模式中强制使用大写字母.也许DateTimeFormatterBuilder能帮上忙,我不知道。作为一种解决办法,您可以简单地调用String.toUpperCase( Locale )

代码语言:javascript
复制
Locale locale = Locale.US ;  // Or Locale.UK, etc.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uu" ).withLocale( locale ) ;
String output = myZonedDateTime.format( f ).toUpperCase( locale ) ;

提示

  • 我建议你不要硬编码这样的格式。通常,最好让java.time通过调用DateTimeFormatter.ofLocalizedDateTime为您自动本地化。
  • 我进一步建议,避免每年只使用两位数,因为这会使输出更难读,并造成歧义。节省几个像素或墨粉粒子并不能证明我在企业中看到的困惑是正当的。
  • 考虑对日期使用标准的ISO 8601格式,如果您的用户是可以接受的:YYYY。这种格式很容易识别,在思想上很容易处理(大、中、小层次的细节),并且易于跨文化阅读。在生成/解析文本时,默认情况下在java.time类中使用ISO8601格式。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62140379

复制
相关文章

相似问题

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