如何使用java在SQL中找到两个时间值的差异?

时间:2014-12-15 18:53:52

标签: java sql sql-server datetime

我有一个java类,它给了我time_intime_outTime_intime_out也是我的sql数据库中的表。我希望找到可以计算为time_out - time_in的工作时间。 Time_in和time_out是时间格式(hh:mm:ss)。如何找工作时间?我尝试的代码不起作用,因为数据变量类型(我使用String)。但无论如何我无法用int数据类型做到这一点。 这是我的课程。我没有把time_out用来节省空间。假设有另一种方法可以像time_in一样检索time_out。

import java.sql.*;


public class blah {

    //------MONDAY-------
    private static String timeInQMonday;
    private static String timeInMonday;


    public static void main(String[] args) {

        loadTimeInMonday();
        loadWorkHour();

    }

    public static void loadWorkHour(){
        //workHour = time_out - time_in;
    }

    public static void loadTimeInMonday(){
                try {
                     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                     String url = "jdbc:sqlserver://SERVER2\\WASPDBEXPRESS;databaseName=WaspTime;integratedSecurity=true;";
                     Connection conn = DriverManager.getConnection(url);
                     System.out.println("Connection established!");

                     //Creating the statement
                     Statement stmt = conn.createStatement();
                     timeInQMonday = "SELECT CONVERT(VARCHAR(8), time_in, 108) AS time_in  FROM [WaspTime].[dbo].[job_punch_card]  WHERE emp_key=55 and punch_day= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)";

                     try {
                         stmt = conn.createStatement();
                         ResultSet rsTimeIn = stmt.executeQuery(timeInQMonday);
                         //-------DISPLAY THE RESULT-----

                         while (rsTimeIn.next()) {
                              timeInMonday = rsTimeIn.getString("time_in");

                              if(timeInMonday==null){
                                  System.out.println("No Data");
                              }else{
                                  System.out.println("clock in: " + timeInMonday);
                              }               
                            }

                       ///////////////////////////////  

                     } catch (SQLException e ) {
                         System.out.println(e);
                     } finally {
                         if (stmt != null) { stmt.close(); }
                     }

                } catch (Exception e) {
                    System.out.println("Connection Failed");
                }
    }
}

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解问题细节,但如果我是正确的,你需要工作的小时数。以下是您可以使用的代码:

import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;

class HoursWorked {
    public static void main (String[] args) throws java.lang.Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:SS");
        Date timeIn = sdf.parse("01:00:00");
        Date timeOut = sdf.parse("09:30:00");
        long workHourInMillis = timeOut.getTime() - timeIn.getTime();
        System.out.println("Hours worked: " + TimeUnit.MILLISECONDS.toHours(workHourInMillis));
    }
}

答案 1 :(得分:0)

使用SimpleDateFormat将字符串解析为日期。

将日期转换为Calender

从日历中获取一小时。 calender.get(Calender.HOUR)。

从那里你可以找到差异