java 如何返回给定输入日期的正确日期格式

bkhjykvo  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(90)

我有下面的代码片段,而不是硬编码的过程中的日期格式是有无论如何,我可以得到正确的日期格式返回Java。

private String getFormatter(String datetimeString) {
    final String[] formats = {
        "yyyy-MM-dd HH:mm:ss.S",
        "yyyy-MM-dd HH:mm:ss.SS",
        "yyyy-MM-dd HH:mm:ss.SSS",
        "yyyy-MM-dd HH:mm:ss.SSSS",
        "yyyy-MM-dd HH:mm:ss.SSSSS",
        "yyyy-MM-dd HH:mm:ss.SSSSSS"
    };
    for (String format: formats){
        LocalDateTime.parse(datetimeString, DateTimeFormatter.ofPattern(format));
        return format;
    }  
    return null;
}
b1uwtaje

b1uwtaje1#

tl;dr

List.of (
                "yyyy-MM-dd HH:mm:ss.S" ,
                "yyyy-MM-dd HH:mm:ss.SS" ,
                "yyyy-MM-dd HH:mm:ss.SSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSSSS"
        )
        .get (

                "2023-01-23 12:34:56.123456".length ( ) -
                        "2023-01-23 12:34:56.".length ( ) -
                        1
        )

或者跳过所有这些格式化程序。将👉🏼SPACE替换为T,并默认解析。

LocalDateTime.parse ( input.replace ( " " , "T" ) )

详情

只是检查文本的长度!使用index = input.length ( ) - 20 - 1

List < String > patterns =
        List.of (
                "yyyy-MM-dd HH:mm:ss.S" ,
                "yyyy-MM-dd HH:mm:ss.SS" ,
                "yyyy-MM-dd HH:mm:ss.SSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSSS" ,
                "yyyy-MM-dd HH:mm:ss.SSSSSS"
        );
String input = "2023-01-23 12:34:56.123456";
int minLength = "2023-01-23 12:34:56.".length ( );  // 20.
int index = input.length ( ) - minLength - 1;  // Subtract 1 for annoying zero-based index counting.
String result = patterns.get ( index );

请在Ideone.com上查看此代码。
结果= yyyy-MM-dd HH:mm:ss.SSSSSS

不需要这些格式化模式

顺便说一下,这些特定格式都不是真正需要的。
在解析/生成文本时,java.time 类默认使用标准ISO 8601格式。有了这样的输入,就不需要指定格式化模式。
您的输入几乎符合ISO 8601标准。只需将中间的空格字符替换为T即可完全遵守。调用String#replace,即.replace( " " , "T" )

List < String > inputs =
        List.of (
                "2023-01-23 12:34:56.1" ,
                "2023-01-23 12:34:56.12" ,
                "2023-01-23 12:34:56.123" ,
                "2023-01-23 12:34:56.1234" ,
                "2023-01-23 12:34:56.12345" ,
                "2023-01-23 12:34:56.123456"
        );
inputs.forEach ( ( String input ) -> System.out.println ( LocalDateTime.parse ( input.replace ( " " , "T" ) ) ) );

运行时:

2023-01-23T12:34:56.100
2023-01-23T12:34:56.120
2023-01-23T12:34:56.123
2023-01-23T12:34:56.123400
2023-01-23T12:34:56.123450
2023-01-23T12:34:56.123456

相关问题