将任何传入日期格式转换为Java中的标准格式

将任何传入日期格式转换为Java中的标准格式,java,Java,Java中是否有任何类可以将不同格式的传入日期转换为标准格式。我知道SimpleDataFormat可以将日期转换为特定格式,但我需要一种方法,可以将以下所有日期转换为YY-MM-DD_HH:MM:SS_inputstring格式: 投入 输出 我们希望以多种格式输入日期值,这些格式应转换为YYYY-MM-DD\u HH:MM:SS\u inputstring 我知道这是一个非常常见的问题,但我找不到适合我的场景的问题 如果您知道所有可能的传入日期格式,您可以为每个格式创建一个SimpleDat

Java中是否有任何类可以将不同格式的传入日期转换为标准格式。我知道SimpleDataFormat可以将日期转换为特定格式,但我需要一种方法,可以将以下所有日期转换为YY-MM-DD_HH:MM:SS_inputstring格式:

投入 输出 我们希望以多种格式输入日期值,这些格式应转换为
YYYY-MM-DD\u HH:MM:SS\u inputstring

我知道这是一个非常常见的问题,但我找不到适合我的场景的问题

如果您知道所有可能的传入日期格式,您可以为每个格式创建一个
SimpleDateFormat
实例。然后,对于每个传入的日期字符串,您只需在列表中运行它。如果某个格式无法解析此字符串,它将抛出一个异常,捕获它并转到下一个格式,冲洗并重复,直到找到解析字符串的格式。

如果您知道所有可能的传入日期格式,您可以为每个格式创建一个
SimpleDataFormat
实例。然后,对于每个传入的日期字符串,您只需在列表中运行它。如果某个格式无法解析此字符串,它将抛出一个异常,捕获它并继续下一个格式,冲洗并重复,直到找到解析字符串的格式。

使用java.time 没有破译任何随机格式的神奇方法。但是在你的例子中,你有简单的方法来识别每一种特定的格式

DateTimeFormatter f ;
if ( input.contains( "_" ) ) {  // 20170112_125645
    f = DateTimeFormatter.ofPattern( "uuuuMMdd'_'HH:mm:ss" );

} else if ( input.contains( " " ) ) {  // 20170915 137546
    f = DateTimeFormatter.ofPattern( "uuuuMMdd' 'HH:mm:ss" );

} else if ( input.contains( ":" ) ) {  // 09122017:135292
    f = DateTimeFormatter.ofPattern( "ddMMuuuu':'HH:mm:ss" );

} else if ( input.length() == 16 ) {  // 2014012014132390
    f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSS" );

} else {
    … // Handle error condition
    System.out.println( "ERROR - Unexpected input: " + input ) ;

}

LocalDateTime ldt = LocalDateTime.parse( input , f );
当然,在经常调用的实际代码中,我会缓存那些
DateTimeFormatter
实例,而不是每次实例化。如果在代码库的其他地方使用,可以定义一个
Enum

通常我建议总是在格式化程序中指定
区域设置
,而不是隐式地依赖JVM的当前默认设置。但在这里,我不认为区域设置有任何影响

避免遗留日期时间类 您提到了
SimpleDateFormat
。该类是应该避免的麻烦的旧日期时间类之一。现在是遗留类,被java.time类取代


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如,和。

使用java.time 没有破译任何随机格式的神奇方法。但是在你的例子中,你有简单的方法来识别每一种特定的格式

DateTimeFormatter f ;
if ( input.contains( "_" ) ) {  // 20170112_125645
    f = DateTimeFormatter.ofPattern( "uuuuMMdd'_'HH:mm:ss" );

} else if ( input.contains( " " ) ) {  // 20170915 137546
    f = DateTimeFormatter.ofPattern( "uuuuMMdd' 'HH:mm:ss" );

} else if ( input.contains( ":" ) ) {  // 09122017:135292
    f = DateTimeFormatter.ofPattern( "ddMMuuuu':'HH:mm:ss" );

} else if ( input.length() == 16 ) {  // 2014012014132390
    f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSS" );

} else {
    … // Handle error condition
    System.out.println( "ERROR - Unexpected input: " + input ) ;

}

LocalDateTime ldt = LocalDateTime.parse( input , f );
当然,在经常调用的实际代码中,我会缓存那些
DateTimeFormatter
实例,而不是每次实例化。如果在代码库的其他地方使用,可以定义一个
Enum

通常我建议总是在格式化程序中指定
区域设置
,而不是隐式地依赖JVM的当前默认设置。但在这里,我不认为区域设置有任何影响

避免遗留日期时间类 您提到了
SimpleDateFormat
。该类是应该避免的麻烦的旧日期时间类之一。现在是遗留类,被java.time类取代


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

相关:那么您想要一些魔法类???我看不出
20140120114132390
是如何自动实现的™ parsedAny格式?没有。但是有几个实用程序可以从一组格式中进行解析。“Java中有没有任何类可以…”是的,有,当你编写它的时候。
787546
应该是什么时间?--仅仅通过查看值来区分
ddMMyyyy
MMddyyyy
,是不可能的,因此您永远无法处理任何格式。相关:那么您想要一些魔法类???我看不出
20140120114132390
是如何自动实现的™ parsedAny格式?没有。但是有几个实用程序可以从一组格式中进行解析。“Java中有没有任何类可以…”是的,有,当你编写它的时候。
787546
应该是什么时间?--仅通过查看值来区分
ddMMyyyy
MMddyyyy
,是不可能的,因此您永远无法处理任何格式。这也有助于FYI,即麻烦的旧日期时间类
DateTimeFormatter f ;
if ( input.contains( "_" ) ) {  // 20170112_125645
    f = DateTimeFormatter.ofPattern( "uuuuMMdd'_'HH:mm:ss" );

} else if ( input.contains( " " ) ) {  // 20170915 137546
    f = DateTimeFormatter.ofPattern( "uuuuMMdd' 'HH:mm:ss" );

} else if ( input.contains( ":" ) ) {  // 09122017:135292
    f = DateTimeFormatter.ofPattern( "ddMMuuuu':'HH:mm:ss" );

} else if ( input.length() == 16 ) {  // 2014012014132390
    f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSS" );

} else {
    … // Handle error condition
    System.out.println( "ERROR - Unexpected input: " + input ) ;

}

LocalDateTime ldt = LocalDateTime.parse( input , f );