java 在java中获取开始和结束时间
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12775418/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
getting start and end time in java
提问by kdot
i want to get the value of startTime and endTime from java gui to database.
我想从 java gui 到数据库获取 startTime 和 endTime 的值。
ComputerSeats class
计算机座位类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class SeatMonitoringDesign extends JFrame
{
public JLabel LStation, LID, LFirstName, LLastName, LTimeIn;
public JLabel[] Astation,Aid, Afirstname, Alastname, Atime;
public JRadioButton[] seat = new JRadioButton[10];
private String str = "";
private int station, occupiedSeatCounter;
private JLabel studNum, seatNum;
private ButtonGroup seatGroup = new ButtonGroup();
private boolean[] seatOccupied = new boolean[10];
private SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss");
private JTextField studNumTF;
private JButton logIn, logOut;
private ButtonHandler logInB;
private ButtonHandler logOutB;
private ButtonHandler radioB;
public SeatMonitoringDesign()
{
studNum = new JLabel("Enter Your Student Number: ");
studNum.setLocation(30,20);
studNum.setSize(200,100);
studNumTF = new JTextField(7);
studNumTF.setLocation(50,80);
studNumTF.setSize(120,30);
seatNum = new JLabel("Station Numbers: ");
seatNum.setLocation(60,90);
seatNum.setSize(600,400);
setTitle("Computer Seat Registration");
Container pane = getContentPane();
pane.setLayout(null);
pane.add(studNum);
pane.add(studNumTF);
setSize(1130,500);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
int x=50,y=150;
for(int i=0 ; i<10 ; i++)
{
switch(i)
{
case 0: str = "1"; break;
case 1: str = "2"; break;
case 2: str = "3"; break;
case 3: str = "4"; break;
case 4: str = "5"; break;
case 5: str = "6"; break;
case 6: str = "7"; break;
case 7: str = "8"; break;
case 8: str = "9"; break;
case 9: str = "10"; break;
}
seat[i] = new JRadioButton(str);
seat[i].setSize(60,40);
seat[i].setLocation(x,y);
radioB = new ButtonHandler();
seat[i].addItemListener(radioB);
seat[i].setBackground(Color.green);
seatGroup.add(seat[i]);
pane.add(seat[i]);
x=110;
if((i+1)%2==0)
{
x=50;
y=y+30;
}
}
for(int i=0 ; i<10 ; i++)
{
seatOccupied[i] = false;
}
logIn = new JButton("Log In");
logIn.setSize(100,30);
logIn.setLocation(15,350);
logIn.setBackground(Color.orange);
logInB = new ButtonHandler();
logIn.addActionListener(logInB);
pane.add(logIn);
logOut = new JButton("Log Out");
logOut.setSize(100,30);
logOut.setLocation(125,350);
logOut.setBackground(Color.orange);
logOutB = new ButtonHandler();
logOut.addActionListener(logOutB);
pane.add(logOut);
LStation = new JLabel("Station #", SwingConstants.CENTER);
LStation.setSize(100,20);
LStation.setLocation(280,60);
pane.add(LStation);
LID = new JLabel("Student Number");
LID.setSize(100,20);
LID.setLocation(450,60);
pane.add(LID);
LFirstName = new JLabel("First Name");
LFirstName.setSize(100,20);
LFirstName.setLocation(630,60);
pane.add(LFirstName);
LLastName = new JLabel("Last Name");
LLastName.setSize(100,20);
LLastName.setLocation(810,60);
pane.add(LLastName);
LTimeIn = new JLabel("Time In");
LTimeIn.setSize(100,20);
LTimeIn.setLocation(990,60);
pane.add(LTimeIn);
Astation = new JLabel[10];
Aid = new JLabel[10];
Afirstname = new JLabel[10];
Alastname = new JLabel[10];
Atime = new JLabel[10];
y=85;
for(int i=0 ; i<10 ; i++)
{
switch(i)
{
case 0: str = "1"; break;
case 1: str = "2"; break;
case 2: str = "3"; break;
case 3: str = "4"; break;
case 4: str = "5"; break;
case 5: str = "6"; break;
case 6: str = "7"; break;
case 7: str = "8"; break;
case 8: str = "9"; break;
case 9: str = "10"; break;
}
Astation[i] = new JLabel(str, SwingConstants.CENTER);
Astation[i].setSize(100,30);
Astation[i].setLocation(280,y);
pane.add(Astation[i]);
Aid[i] = new JLabel("Vacant Station");
Aid[i].setSize(100,30);
Aid[i].setLocation(450,y);
pane.add(Aid[i]);
Afirstname[i] = new JLabel("---------");
Afirstname[i].setSize(100,30);
Afirstname[i].setLocation(630,y);
pane.add(Afirstname[i]);
Alastname[i] = new JLabel("---------");
Alastname[i].setSize(100,30);
Alastname[i].setLocation(810,y);
pane.add(Alastname[i]);
Atime[i] = new JLabel("00:00:00--");
Atime[i].setSize(100,30);
Atime[i].setLocation(990,y);
pane.add(Atime[i]);
y = y+30;
}
setVisible(true);
}
public class ButtonHandler implements ActionListener, ItemListener
{
public void itemStateChanged(ItemEvent e)
{
for(int i=0 ; i<10 ; i++)
{
if(e.getSource() == seat[i])
station = (i+1);
}
}
public void actionPerformed(ActionEvent e)
{
LogicalChecker lc = new LogicalChecker();
cobadatabase cb = new cobadatabase(studNumTF.getText());
String output;
Date now1 = new Date();
Date now2 = new Date();
//long secs = (now2.getTime() - now1.getTime()) / 1000;
//long diffSeconds = diff / 1000 % 60;
//long diffMinutes = diff / (60 * 1000) % 60;
// long diffHours = diff / (60 * 60 * 1000) % 60;
//long startTime = System.currentTimeMillis();
//long finishTime = System.currentTimeMillis();
//long elapsedTime = finishTime - startTime;
long diff = (now2.getTime() - now1.getTime());
cobadatabase cb2 = new cobadatabase(studNumTF.getText(),dateFormatter.format(now1),dateFormatter.format(now2), diff);
if("Log In".equals(e.getActionCommand()))
{
if(station == 0)
{
lc.StationCheck(0);
}
else if(seatOccupied[station-1] == true)
{
lc.StationCheck(2);
}
else if(!studNumTF.getText().equals(cb.getStudentNumber()))
{
studNumTF.setText("");
lc.StationCheck(3);
}
else
{
seatOccupied[station-1] = true;
Aid[station-1].setText(cb.getStudentNumber());
Afirstname[station-1].setText(cb.getFirstName());
Alastname[station-1].setText(cb.getLastName());
seat[station-1].setBackground(Color.red);
Atime[station-1].setText(dateFormatter.format(now1));
occupiedSeatCounter++;
}
}
if("Log Out".equals(e.getActionCommand()))
{
if(station == 0)
{
lc.StationCheck(0);
}
else if(Aid[station-1].getText() == "Vacant Station")
{
lc.StationCheck(1);
}
else
{
Aid[station-1].setText("Vacant Station");
Afirstname[station-1].setText("---------");
Alastname[station-1].setText("---------");
seat[station-1].setBackground(Color.green);
Atime[station-1].setText("00:00:00");
seatOccupied[station-1] = false;
studNumTF.setText("");
output = "Time Check-Out "+dateFormatter.format(now2)+"\n Total Time: " +diff;
JOptionPane.showMessageDialog(null,output, "Check- Out.",JOptionPane.INFORMATION_MESSAGE);
}
}
}
}
}
cobadatabase class
coba 数据库类
import java.sql.*;
import java.util.*;
import java.text.*;
public class cobadatabase{
protected String sn,fn,ln,srt, sn2, srt2, et;
protected Long tt;
private Connection conn;
private PreparedStatement st;
public cobadatabase(){
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/studentrecords","root","");
}
catch(Exception e){}
}
public cobadatabase(String sn2, String str2, String et, long tt)
{
this();
try
{
st = conn.prepareStatement("Insert into time(StudentNumber,StartTime,EndTime,TotalTime) values(?,?,?,?)");
st.setString(1,sn2);
st.setString(2,str2);
st.setString(3,et);
st.setLong(4,tt);
st.executeUpdate();
}
catch(Exception e){}
}
public cobadatabase(String StudentNumber)
{
this();
try{
st = conn.prepareStatement("SELECT * FROM student WHERE StudentNumber=?");
st.setString(1,StudentNumber);
ResultSet rs = st.executeQuery();
while (rs.next())
{
this.sn = rs.getString(1);
this.fn = rs.getString(2);
this.ln = rs.getString(3);
this.srt = rs.getString(4);
SimpleDateFormat ft = new SimpleDateFormat("kk:mm:ss");
ft.format(rs.getTime("TotalTime").getTime());
}
}
catch(Exception e){}
}
public cobadatabase(String StudentNumber2, String Start, String End)
{
this();
try{
st = conn.prepareStatement("SELECT * FROM time WHERE StudentNumber2=?");
st.setString(2,Start);
st.setString(3,End);
ResultSet rs = st.executeQuery();
while (rs.next())
{
this.sn2 = rs.getString(1);
this.srt2 = rs.getString(2);
this.et = rs.getString(3);
this.tt = rs.getLong(4);
}
}
catch(Exception e){}
}
public String getFirstName(){
return fn;
}
public String getLastName(){
return ln;
}
public String getStudentNumber(){
return sn;
}
public String getStart(){
return srt2;
}
public String getEnd(){
return et;
}
}
the problem here is that when the login button is clicked, the start time displays both on the startTime and endTime column in my database. And when the log out button is clicked, another row is created in the database which contains the endTime on both startTime and endTime column.. I am wondering why does this happen..
这里的问题是,当单击登录按钮时,开始时间显示在我数据库的 startTime 和 endTime 列上。当单击注销按钮时,会在数据库中创建另一行,其中包含 startTime 和 endTime 列上的 endTime .. 我想知道为什么会发生这种情况..
回答by Lemon Juice
Look at the following URL http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/Use it at the begining of the app, and at the end.
看下面这个网址 http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/在应用的开头和结尾使用.
If you are measuring the time looking how long the app executed, the above is not the best I guess. In case of that, try something like following
如果您正在测量应用程序执行多长时间的时间,那么我认为以上并不是最好的。在这种情况下,请尝试以下操作
import java.util.*;
public class VectorTest
{
Vector v = new Vector();
public VectorTest()
{
long startTime = System.currentTimeMillis(); // Get the start Time
long endTime = 0;
System.out.println( startTime);
for(int i=0;i<100000;i++)
{
v.add(i);
}
for(int i=0;i<v.size();i++)
{
System.out.println(v.get(i));
}
endTime = System.currentTimeMillis(); //Get the end Time
System.out.println(endTime);
System.out.println("Difference in mili seconds: "+ (endTime-startTime)); //Print the difference in mili seconds
System.out.println("Differencce in Seconds: "+ (endTime-startTime)/1000); // Print the difference in seconds
}
public static void main(String[]args)
{
new VectorTest();
}
}
EXTRA ADVISES FOR GOOD PROGRAMMING PRACTICES
良好编程实践的额外建议
Look at the 3rd overloaded "CodeBase" constructor. You have 1 parameter in SQL query, but trying to set 2 in program, EVEN WITH invalid indexes 2 and 3
Close the connection inside the finally block
don't leave catch() method empty. Print the stack trace
Don't use the same PreparedStament everywhere. Crate them as local variables not as global ones. Sometimes there are delays in automated connection closing methods in databases. In such a case, your program will act in an unexpected way. If you declare them locally, the variables are gone as soon as the method is don e
查看第三个重载的“CodeBase”构造函数。您在 SQL 查询中有 1 个参数,但试图在程序中设置 2 个参数,即使是无效索引 2 和 3
关闭 finally 块内的连接
不要将 catch() 方法留空。打印堆栈跟踪
不要在任何地方使用相同的 PreparedStament。将它们作为局部变量而不是全局变量。有时,数据库中的自动连接关闭方法会出现延迟。在这种情况下,您的程序将以意想不到的方式运行。如果你在本地声明它们,一旦方法完成,变量就会消失
回答by calderonmluis
You should try setting the times when the correct button is clicked instead of setting both start and end times for the same button. I would set a global variable for the startTime and calculate like so
您应该尝试设置单击正确按钮的时间,而不是为同一按钮设置开始和结束时间。我会为 startTime 设置一个全局变量并像这样计算
private long startTime = null;
public void actionPerformed(ActionEvent e) {
LogicalChecker lc = new LogicalChecker();
cobadatabase cb = new cobadatabase(studNumTF.getText());
String output;
//long secs = (now2.getTime() - now1.getTime()) / 1000;
//long diffSeconds = diff / 1000 % 60;
//long diffMinutes = diff / (60 * 1000) % 60;
// long diffHours = diff / (60 * 60 * 1000) % 60;
//long startTime = System.currentTimeMillis();
//long finishTime = System.currentTimeMillis();
//long elapsedTime = finishTime - startTime;
long diff = (now2.getTime() - now1.getTime());
cobadatabase cb2 = new cobadatabase(studNumTF.getText(),dateFormatter.format(now1),dateFormatter.format(now2), diff);
if("Log In".equals(e.getActionCommand())){
this.startTime = new Date().getTime(); // set start time
... do stuff
} else if("Log Out".equals(e.getActionCommand())){
long totalTime = new Date().getTime() - this.startTime(); // calculate total time
... do stuff
}
}