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

在Java中将日期字符串转换为特定的日期格式“ dd-MM-yyyy”

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

在Java中将日期字符串转换为特定的日期格式“ dd-MM-yyyy”

ISO 8601

现在的问题是所有联系人的生日格式都不同

真正的问题是:以各种格式存储日期时间值。

将日期时间值序列化为文本时,请 始终使用标准 ISO
8601
格式
。这些格式合理且实用,避免了歧义,易于通过机器解析,也可以被跨文化的人类阅读。

解析/生成字符串时,
java.time 类默认使用这些标准格式。

java.time

现代方法使用 java.time
类代替了麻烦的旧的传统日期时间类。避免传统

Date
Calendar
SimpleDateFormat
,和相关的类。

因此,例如,一个同步联系人的生日如“ 1990-02-07”或“ 1988-06-15T22:00:00.000Z”或“ 12-02-1990”等。

由于模棱两可,因此无法解析 任何 可能的日期时间格式。例如,

01-02-1990
代表1月2日还是2月1日?

您可以 猜测 是否愿意,尽管根据准确度对您的业务问题的重要性可能不明智。

使用定义一堆格式化模式

DateTimeFormatter
。尝试每个。当
DateTimeParseException
被抛出,转移到下一个模式,直到一个作品。

您可以使用字符串长度来帮助指导猜测。

List < DateTimeFormatter > dateFormatters = new ArrayList <>( 2 );dateFormatters.add( DateTimeFormatter.ofPattern( "uuuu-MM-dd" ) );  // BEWARE of ambiguity in these formatters regarding month-versus-day.dateFormatters.add( DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) );String input = "1990-02-07";// String input = "12-02-1990" ;if ( null == input ){    throw new IllegalArgumentException( "Passed null argument where a date-time string is expected. Message # c7a4fe0e-9500-45d5-a041-74d457381008." );} else if ( input.length() <= 10 ){    LocalDate ld = null;    for ( DateTimeFormatter f : dateFormatters )    {        try        { ld = LocalDate.parse( input , f ); System.out.println( ld );        } catch ( Exception e )        { // No pre here. // We purposely ignore this exception, moving on to try the next formatter in our list.        }    }} else if ( ( input.length() > 10 ) && input.substring( input.length() - 1 ).equalsIgnoreCase( "Z" ) ) // If over 10 in length AND ends in a Z.{    Instant ld = null;    try    {        ld = Instant.parse( input );  // Uses `DateTimeFormatter.ISO_INSTANT` formatter.    } catch ( Exception e )    {        throw new IllegalArgumentException( "Unable to parse date-time string argument. Message # 0d10425f-42f3-4e58-9baa-84ff949e9574." );    }} else if ( input.length() > 10 ){    // TODO: Define another list of formatters to try here.} else if ( input.length() == 0 ){    throw new IllegalArgumentException( "Passed empty string where a date-time string is expected. Message # 0ffbd9b6-8905-4e28-a732-0f402d4673df." );} else  // Impossible-to-reach, for defensive programming.{    throw new RuntimeException( "ERROR - Unexpectedly reached IF-ELSE when checking input argument. Message # 6228d9e0-047a-4b83-8916-bc526e0fd22d." );}System.out.println("Done running.");

1990-02-07

做完了。


关于 java.time

java.time 框架是建立在Java
8和更高版本。这些类取代麻烦的老传统日期时间类,如

java.util.Date
Calendar
,和
SimpleDateFormat

现在处于维护模式的 Joda-
Time

项目建议迁移到java.time类。

要了解更多信息,请参见
Oracle教程 。并在Stack
Overflow中搜索许多示例和说明。规格为JSR 310。

您可以直接与数据库交换 java.time 对象。使用与JDBC
4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。

java.sql.*

在哪里获取java.time类?

  • Java SE 8Java SE 9 和更高版本
    • 内置的
    • 标准Java API的一部分,具有捆绑的实现。
    • Java 9添加了一些次要功能和修复。
  • Java SE 6Java SE 7
    • java.time的许多功能在 ThreeTen- Backport中都被反向移植到Java 6和7 。
  • 安卓系统
    • 更高版本的Android捆绑了java.time类的实现。
    • 对于早期的Android(<26), ThreeTenABP 项目改编了 ThreeTen-Backport (如上所述)。请参阅如何使用ThreeTenABP… 。

ThreeTen-额外
项目与其他类扩展java.time。该项目是将来可能向java.time添加内容的试验场。你可能在这里找到一些有用的类,比如

Interval
YearWeek
YearQuarter
,和更多。



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

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

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