阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

DateTimeFormatter

27次阅读
没有评论

共计 1697 个字符,预计需要花费 5 分钟才能阅读完成。

使用旧的 Date 对象时,我们用 SimpleDateFormat 进行格式化显示。使用新的 LocalDateTimeZonedDateTime时,我们要进行格式化显示,就要使用DateTimeFormatter

SimpleDateFormat 不同的是,DateTimeFormatter不但是不变对象,它还是线程安全的。线程的概念我们会在后面涉及到。现在我们只需要记住:因为 SimpleDateFormat 不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而 DateTimeFormatter 可以只创建一个实例,到处引用。

创建 DateTimeFormatter 时,我们仍然通过传入格式化字符串实现:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

格式化字符串的使用方式与 SimpleDateFormat 完全一致。

另一种创建 DateTimeFormatter 的方法是,传入格式化字符串时,同时指定Locale

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, yyyy-MMMM-dd HH:mm", Locale.US);

这种方式可以按照 Locale 默认习惯格式化。我们来看实际效果:

import java.time.*;
import java.time.format.*;
import java.util.Locale;

public class Main {public static void main(String[] args) {ZonedDateTime zdt = ZonedDateTime.now();
        var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm ZZZZ");
        System.out.println(formatter.format(zdt));

        var zhFormatter = DateTimeFormatter.ofPattern("yyyy MMM dd EE HH:mm", Locale.CHINA);
        System.out.println(zhFormatter.format(zdt));

        var usFormatter = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US);
        System.out.println(usFormatter.format(zdt));
    }
}

在格式化字符串中,如果需要输出固定字符,可以用 'xxx' 表示。

运行上述代码,分别以默认方式、中国地区和美国地区对当前时间进行显示,结果如下:

2019-09-15T23:16 GMT+08:00
2019 9 月 15 周日 23:16
Sun, September/15/2019 23:16

当我们直接调用 System.out.println() 对一个 ZonedDateTime 或者 LocalDateTime 实例进行打印的时候,实际上,调用的是它们的 toString() 方法,默认的 toString() 方法显示的字符串就是按照 ISO 8601 格式显示的,我们可以通过 DateTimeFormatter 预定义的几个静态变量来引用:

var ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ISO_DATE.format(ldt));
System.out.println(DateTimeFormatter.ISO_DATE_TIME.format(ldt));

得到的输出和 toString() 类似:

2019-09-15
2019-09-15T23:16:51.56217

小结

ZonedDateTimeLocalDateTime进行格式化,需要使用 DateTimeFormatter 类;

DateTimeFormatter可以通过格式化字符串和 Locale 对日期和时间进行定制输出。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1697字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中