代码之家  ›  专栏  ›  技术社区  ›  malife89

将java中的字符串读取为正确的日期格式

  •  3
  • malife89  · 技术社区  · 1 年前

    我有一个字符串:

    String inputDate = "18-FEB-24 10.02.33.578000000 AM";
    

    我正试图读回它,并将其格式化为YYYY-MM-DD HH:MM:ss。SSSSSS。 我尝试了SimpleDateFormat和DateTimeFormatter库,但无法将其读回。 下面是来自chatgpt的代码,但出现了错误“String无法在索引3处解析”

    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a", Locale.ENGLISH);
    DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
    LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);
    String formattedDate = dateTime.format(outputFormatter);
    
    1 回复  |  直到 1 年前
        1
  •  6
  •   Jon Skeet    1 年前

    问题是 FEB 这不是Java期望的月份缩写,而是 Feb 。因此,您需要不敏感地解析字符串大小写,这可以通过构建 DateTimeFormatter 使用构建器。以下是一个完整的示例:

    import java.util.*;
    import java.time.*;
    import java.time.format.*;
    
    public class Test {
        public static void main (String[] args) throws Exception {
            String inputDate = "18-FEB-24 10.02.33.578000000 AM";
    
            // Build the parsing part in a case-insensitive manner.
            DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a")
                .toFormatter(Locale.ENGLISH);
    
            DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
            LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);
            String formattedDate = dateTime.format(outputFormatter);
            System.out.println(formattedDate);
        }
    }