如何从日期字符串中获取分隔符?

时间:2018-04-12 14:25:35

标签: java date datetime-parsing

24.03.2018 02:34:22如何从这种日期字符串中获取分隔符('.')?格式可以不同,分隔符也可以是这些'.','-','/'。有没有办法用Java的日期格式类做到这一点?

3 个答案:

答案 0 :(得分:1)

要回答这个问题,我们必须做出一些假设:

  • 正如您所说,分隔符可以是-/.,因此我假设不允许使用其他分隔符。
  • 根据您问题中的唯一示例,我们正在寻找日期的分隔符,时间。
  • 从您的示例中,我们假设日期始终列在时间之前。

因此,我们应该能够通过查找这三个字符中的任何一个字符来解决这个问题:

public static Optional<Character> findDelimiter(String formattedDate) {
    for (char c : formattedDate.toCharArray()) {
        switch (c) {
            case '.':
            case '/':
            case '-':
                return Optional.of(c);
            case ' ':
            case '\t':
                return Optional.empty();
        }
    }

    return Optional.empty();
}

这将停留在空格或制表符的第一个实例上,假设这些都不是分隔符。

答案 1 :(得分:0)

基本上你有两个选择:

  1. 找到分隔符,并选择如何使用此信息进行解析:

    private static LocalDateTime stringToDate(String str) {
        char delimiter = str.charAt(2);
        switch (delimiter) {
            case '.':
                return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
            case '/':
                return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
            case '-':
                return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"));
            default:
                throw new DateTimeParseException("Bad String", str, 0);
        }
    }
    
  2. 找到分隔符并用它构建模式:

    private static LocalDateTime stringToDate(String str) {
        String delimiter = str.substring(2, 3);
        if (delimiter.matches("[-\\.\\/]")) {
            return LocalDateTime.parse(str, DateTimeFormatter
                       .ofPattern("dd" + delimiter + "MM" + delimiter + "yyyy HH:mm:ss"));
        } else {
            throw new DateTimeParseException("Bad String " + str, str, 0);
        }
    }
    
  3. 使用:

    String strdate1 = "04-03-2018 02:34:22";
    LocalDateTime date1 = stringToDate(strdate1);
    

答案 2 :(得分:0)

从格式字符串中我将使用正则表达式来取出以yMd开头和结尾的最长子字符串,其间没有其他字母。如果有更多这样的子串,我会依次将它们全部带走。这应该为您提供格式的yyyy-MM-dd或相应部分。然后从这个子串(这些子串)我将取出所有既不是字母也不是空格的字符(再次使用正则表达式)。或许也可能是空白。在那里你有你的分隔符。考虑一下它们是否为或者不止一个的情况。

它可能比其他人说的要复杂一点,但我认为如果你真的不知道格式是什么样的话,它也会更安全一些。

可能有一种特殊情况:通常的格式化程序(DateTimeFormatterSimpleDateFormat)允许将标点符号括在撇号中。例如,yyyy'.'MM'.'dd表示与yyyy.MM.dd相同。也许你想把它考虑进去。如果一个人真的想要撇号作为分隔符,它应该加倍:yyyy''MM''dd