【问题标题】:Arrays of string dates to util.Date conversion [duplicate]字符串日期数组到 util.Date 转换 [重复]
【发布时间】:2017-09-22 12:09:36
【问题描述】:

我正在为我们公司创建一个考勤管理系统,每个员工的考勤都保存在由指纹生物识别机器生成的文本文件中。问题是我正在尝试从文本文件转换字符串日期数组并将其保存到数据库,但它会发出“无法解析的日期错误”。请参阅代码以供参考:

public void getReadTextFile(String path) throws ParseException{
    sql = new String("INSERT INTO logs(EmpID, ValidDate, ValidTime,Processed, PRDate) VALUES(?,?,?,?,?)");
    BufferedReader br = null;
    String[] ID = new String[3000];
    java.sql.Date[] vDate = new java.sql.Date[3000];
    Time[] vTime = new Time[3000];
    Date date = new Date();
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    try{
        FileInputStream fsStream = new FileInputStream(path);
        br = new BufferedReader(new InputStreamReader(fsStream));
        String strLine;
        br.readLine();
        int i = 0;
        while((strLine = br.readLine()) != null){
            String[] arr = strLine.split("\\s+");
            java.util.Date qDate = format.parse(arr[5]);
            ID[i] = arr[2];
            vDate[i] = new java.sql.Date(qDate.getTime());
            vTime[i] = java.sql.Time.valueOf(arr[6]);
            java.sql.Date sqldate = new java.sql.Date(date.getTime());

            pstmt = data.prepareStatement(sql);
            pstmt.setString(1, arr[2]);
            pstmt.setDate(2, vDate[i]);
            pstmt.setTime(3, vTime[i]);
            pstmt.setInt(4, 1);
            pstmt.setDate(5, sqldate);
        }
        i++;

    }catch(IOException ex){
        System.out.println(ex.getMessage());
    }catch(SQLException ev){
        //System.out.println(ev.getMessage());
        ev.printStackTrace();
    }catch(ParseException pe){
        pe.printStackTrace();
    }
    finally{
        try{
            if(br != null){
                br.close();
            }
        }catch(IOException e){
            System.out.println(e.getMessage());
        }
    }
}

这是堆栈跟踪:

java.text.ParseException: Unparseable date: "2016/12/19"
at java.text.DateFormat.parse(Unknown Source)
at Model.ProcessDB.getReadTextFile(ProcessDB.java:94)
at View.Dashboard$2.actionPerformed(Dashboard.java:187)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

【问题讨论】:

  • 堆栈跟踪在哪里?哪一行给你“无法解析的日期错误”?
  • 行是“java.util.Date qDate = format.parse(arr[5]);”
  • 我的问题是将字符串日期数组转换为日期。

标签: java mysql arrays text-files


【解决方案1】:

如果您指定日期如“2017-04-25”,请使用 "yyyy-MM-dd" 而不是 "yyyy-mm-dd"

 DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

在哪里,

M- Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
m- Minute in hour, 0-59 (normally mm)

如果您要指定“2017/04/25”之类的日期,请使用 "yyyy/MM/dd" 而不是 "yyyy-mm-dd"

 DateFormat format = new SimpleDateFormat("yyyy/MM/dd");

【讨论】:

  • 我的问题是尝试将字符串日期数组转换为日期。
  • @SilverRay 不,您的问题是用于转换(解析)每个日期的格式。正如例外所说:java.text.ParseException: Unparseable date: "2016/12/19" 因为您使用此模式"yyyy-mm-dd"
  • 对不起,我忘记更正了。我已经用你的建议替换了它,但它仍然抛出同样的错误。
  • 如果您查看堆栈跟踪的第二句话,它会说“at java.text.DateFormat.parse(Unknown Source)”。
  • @SilverRay 仔细检查模式,Sanked D 也犯了错误。你的分隔符应该是/ 而不是- 所以使用"yyyy/MM/dd"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2016-04-28
相关资源
最近更新 更多