栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

DateTimeFormatter接受多个日期并转换为一个日期(java.time库)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DateTimeFormatter接受多个日期并转换为一个日期(java.time库)

我已经测试了这个 JDK 1.8.0_131为Mac OS XJDK 1.8.0111的Windows (包括工作)。

我创建了一个

DateTimeFormatter
带有可选部分(以分隔
[]
)的,以解析两种情况(
MM/dd/yyyy
yyyy-MM-dd'T'HH:mm:ss
)。

相同的格式化程序适用于您的情况(

LocalDate
),但以下是一些注意事项。

// parse both formats (use optional section, delimited by [])DateTimeFormatter parser = DateTimeFormatter.ofPattern("[MM/dd/yyyy][yyyy-MM-dd'T'HH:mm:ss]");// parse MM/dd/yyyyLocalDate d1 = LocalDate.parse("10/16/2016", parser);// parse yyyy-MM-dd'T'HH:mm:ssLocalDate d2 = LocalDate.parse("2016-10-16T10:20:30", parser);// parser.format(d1) is the same as d1.format(parser)System.out.println(parser.format(d1));System.out.println(parser.format(d2));

输出为:

2016年10月16日
2016年10月16日


PS: 仅适用于

LocalDate
。如果我尝试使用时间字段(例如
LocalDateTime
)来格式化对象,则会使用两种格式:

System.out.println(parser.format(LocalDateTime.now()));

打印:

06/18 / 20172017-06-18T07:40:55

请注意,它使用两种模式进行格式化。我的猜测是,格式化程序会检查对象是否在每个可选节中都有字段。由于

LocalDate
没有时间字段(小时/分钟/秒),因此第二种模式失败,并且仅打印第一种(
MM/dd/yyyy
)。但是
LocalDateTime
具有所有时间字段,并且两种模式均有效,因此都用于格式化。

我的结论是:这不是一个通用的解决方案(如Joda-
Time的版本),它更像是一个“幸运的”案例,其中涉及的模式创造了理想的情况。但是我不会在所有情况下都依赖它。

无论如何,如果您仅使用

LocalDate
,则可以尝试使用此代码。但是,如果您正在使用其他类型,则可能必须为输出使用 另一个
格式化程序,如下所示:

// parser/formatter for month/day/yearDateTimeFormatter mdy = DateTimeFormatter.ofPattern("MM/dd/yyyy");// parser for both patternsDateTimeFormatter parser = new DateTimeFormatterBuilder()    // optional MM/dd/yyyy    .appendOptional(mdy)    // optional yyyy-MM-dd'T'HH:mm:ss (use built-in formatter)    .appendOptional(DateTimeFormatter.ISO_LOCAL_DATE_TIME)    // create formatter    .toFormatter();// parse MM/dd/yyyyLocalDate d1 = LocalDate.parse("10/16/2016", parser);// parse yyyy-MM-dd'T'HH:mm:ssLocalDate d2 = LocalDate.parse("2016-10-16T10:20:30", parser);// use mdy to formatSystem.out.println(mdy.format(d1));System.out.println(mdy.format(d2));// format object with time fields: using mdy formatter to avoid multiple pattern problemSystem.out.println(mdy.format(LocalDateTime.now()));

输出为:

10/16/2016
10/16/2016
06/18/2017



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号