将字符串dateTime转换为joda日期时间并将其添加到数据库中

时间:2017-06-03 23:40:22

标签: html5 datetime java-ee

正如小说我试图从HTML5日期时间输入中检索日期时间并将其添加到我的数据库这里的代码

private void HandleDate(String date, Test test) {
   DateTime dt = null;
   try {
       dt = CheckDateValidity(date);
   } catch (TestManagementException e) {
       setErrors(FIELD_DATE, e.getMessage());
   }
   test.setDate(dt);

}

private DateTime CheckDateValidity(String date) throws TestManagementException {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd hh:mm:ss");
    DateTime dateTime;
    try {
        dateTime = formatter.parseDateTime(date);
    } catch (Exception e) {
        throw new TestManagementException("date couldn't be converted");
    }
    return dateTime;
}

一切似乎都没有检测到错误,但数据库保持不变,没有添加原始数据。 怎么了? :/ 另一个问题或问题: 什么是我应该在输入中使用的模式,以便用户只应输入这种日期:

yyyy-mm-dd HH:mm:ss

PS:

当我尝试这样做时:

 private void HandleDate(String date, Test test) {
    DateTime dt = null;
   try {
       CheckDateValidity(date, dt);
   } catch (TestManagementException e) {
       setErrors(FIELD_DATE, e.getMessage());
   }
   test.setDate(dt);

}

private void CheckDateValidity(String date, DateTime dateTime) throws TestManagementException {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd hh:mm:ss");
   // DateTime dateTime;
    try {
        dateTime = formatter.parseDateTime(date);
    } catch (Exception e) {
        throw new TestManagementException("date couldn't be converted");
    }
   // return dateTime;
}

它被添加到数据库但日期值为空

1 个答案:

答案 0 :(得分:0)

对于那些遇到同样问题的人,我发现了问题和解决方案。 问题是:当我将字符串转换为日期时,我得到了这个表单:

yyyy-mm-ddThh:mm:ss.sss+01:00

虽然数据库字段是这种形式:

yyyy-mm-dd hh:mm:ss

这就是为什么它不能被添加到数据库的原因所以我找到的解决方案就是:

private void HandleDate(String date, Test test) {
    DateTime dt = null;
   try {
       dt = CheckDateValidity(date);
   } catch (TestManagementException e) {
       setErrors(FIELD_DATE, e.getMessage());
   }
   test.setDate(dt);
}


private DateTime CheckDateValidity(String date) throws TestManagementException {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    DateTime dateTime;

    try {
        dateTime = formatter.parseDateTime(date);
    } catch (Exception e) {
        throw new TestManagementException("Date couldn't be converted");
    }
    return dateTime;
}

代码没有改变,但我在preparedStatement

中添加了这个
        /****** connect to test table ******/
        Timestamp dt = new Timestamp(test.getDate().getMillis());
        preparedStatement = preparedStatementInitialisation(connection, SQL_INSERT,true,
                test.getTeacherId(),test.getModuleId(), dt, test.getType());
        int status = preparedStatement.executeUpdate();
        if (status == 0){
            throw new DAOException("Error while creating a user, 0 line added to the table!");
        }

所以我没有直接从测试bean中直接处理日期,而是将其转换为timeStamp,现在它完美地运行了

对于html输入中的DateTime模式我刚才做了这个

<input type="datetime" name="date" id="date" placeholder="yyyy-mm-dd hh:mm:ss" pattern="[1-2]{1}[0-9]{3}-(0[0-9]{1}|1[0-2]{1})-([0-2]{1}[0-9]{1}|3[0-1]{1}) ([0-1]{1}[0-9]{1}|2[0-3]{1}):[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}">

现在用户必须输入此类型yyyy-MM-dd HH:mm:ss

的日期才能完美运行

我发现另一个奇怪的事情是,当我使用"yyyy-mm-dd hh:mm:ss"格式化程序模式时,我在月份和时间出现了问题,当时我从01开始转换月份,当我添加00时1}}虽然它没有工作但是当我使用yyyy-MM-dd HH:mm:ss时,它工作了很奇怪的嘿