首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除ParseException

无法删除ParseException
EN

Stack Overflow用户
提问于 2019-03-09 02:01:30
回答 2查看 109关注 0票数 0
代码语言:javascript
复制
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 date。我是Java新手。

EN

回答 2

Stack Overflow用户

发布于 2019-03-09 15:50:35

java.time

代码语言:javascript
复制
    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 date and time API。

JDBC 4.2+

如果你认为你的数据库需要一个Timestamp,你可能不需要,假设你的JDBC驱动程序是JDBC4.2,你可以直接给它提供我们刚刚生成的LocalDateTime对象。例如:

代码语言:javascript
复制
    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表示从01到12的AM或PM内的小时,当然要求AM或PM标记为present).
  2. Since。用户输入不包括秒的分数,格式模式中不应包含.SSS (这可能是导致异常的原因)。

链接

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

票数 0
EN

Stack Overflow用户

发布于 2019-03-09 16:29:09

也许你想试试这个

代码语言:javascript
复制
    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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55068613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档