分享
三行代码  ›  专栏  ›  技术社区  ›  Sudhanshu Goyal

解析函数无法解析字符串,并在Java中引发错误

  •  1
  • Sudhanshu Goyal  · 技术社区  · 1 周前

                String myDate = "2020–03–01 3:15 pm";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm aa",Locale.ENGLISH);
                Date date = sdf.parse(myDate);
    
    2 回复  |  直到 1 周前
        1
  •  1
  •   Arvind Kumar Avinash    1 周前

    用来分隔年、月和日的分隔符似乎不正确。我建议您再次键入日期时间字符串,而不是从某个地方复制和粘贴它。我还建议您从过时的日期时间API切换到 modern 一个。

    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeFormatterBuilder;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            String myDate = "2020-03-01 3:15 pm";
            DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                                .parseCaseInsensitive()
                                                .appendPattern("u-M-d h:m a")
                                                .toFormatter(Locale.ENGLISH);
            LocalDateTime ldt = LocalDateTime.parse(myDate, formatter);
            System.out.println(ldt);
        }
    }
    

    输出:

    2020-03-01T15:15
    

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) throws ParseException {
            String myDate = "2020-03-01 3:15 pm";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd h:mm aa", Locale.ENGLISH);
            Date date = sdf.parse(myDate);
            System.out.println(date);
        }
    }
    

    输出:

    Sun Mar 01 15:15:00 GMT 2020
    

    注意我用了一个 h 与字符串匹配的日期。

        2
  •  2
  •   karllindmark    1 周前

    从外观上看,你的日期字符串包含 – (破折号)代替 - (连字符)。

    尝试在日期中使用连字符,看看它是否能够正确地解析它。

    破折号(

    dash

    .

    连字符( -

    hyphen