无法删除ParseException

问题描述 投票:0回答:2
try{
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
                Date parsedDate = dateFormat.parse(tm);
                timestamp = new java.sql.Timestamp(parsedDate.getTime());

        }
         catch (Exception pe) {
              System.out.println("unexpected exception");
                System.out.println(pe); 
                pe.printStackTrace(); 
            }

控制台显示“意外错误”(在我的catch块中)。我试图将客户端输入日期的“tm”转换为时间戳。 tm的值类似于“YYYY-MM-DD HH:MM:SS”(字符串)。但控制台继续显示Unparseable日期。我是Java新手。

java web-applications simpledateformat datetime-parsing parseexception
2个回答
0
投票

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

    String tm = "2019-02-09 07:35:54";
    LocalDateTime dateTime = LocalDateTime.parse(tm, formatter);
    System.out.println(dateTime);

这会产生以下输出:

2019-02-09T07:35:54

我不鼓励使用SimpleDateFormatDateTimestamp。这些课程的设计很差,而且已经过时了,第一课特别是出了名的麻烦。相反,我使用的是java.time,即现代Java日期和时间API。

JDBC 4.2+

如果您认为您的数据库需要Timestamp,则可能不需要。假设您的JDBC驱动程序符合JDBC 4.2,您可以直接为它提供我们刚刚生成的LocalDateTime对象。例如:

    PreparedStatement ps = yourConnection.prepareStatement(
            "insert into your_table(your_timestamp_col) values (?);");
    ps.setObject(1, dateTime);

您的代码出了什么问题?

格式模式字符串yyyy-MM-dd hh:mm:ss.SSS中有两个错误:

  1. 假设用户输入的小时是从00到23的一天中的小时,你需要用大写的HH来解析它们,正如LppEdd已经在评论中说的那样(小写hh是AM或PM从01到12的小时当然需要存在AM或PM标记)。
  2. 由于用户输入不包含秒的一小部分,因此您不应该在格式模式中使用.SSS(这可能是导致您的异常的原因)。

链接

Oracle tutorial: Date Time解释如何使用java.time。


0
投票

也许你想尝试一下

    String tm = "2014-01-01 00:00:00";
    String frontEndFormat = "yyyy-MM-dd HH:mm:ss";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(frontEndFormat);
    LocalDateTime localDateTime = LocalDateTime.parse(tm, formatter);
    Timestamp timestamp = Timestamp.valueOf(localDateTime);
    //prints 2014-01-01 00:00:00.0
    System.out.println(timestamp);

您可以注意到大写字母HH用了几个小时,小写字母mm用了几分钟。

© www.soinside.com 2019 - 2024. All rights reserved.