Java: getting a time interval

I am participating in a project to capture a time interval in hh: mm. I have two buttons named btnTimeOut and btnTimeIn that fix the system time when clicked. The requirement is to get the interval between btnTimeOut and btnTime in hh: mm, etc. 12:30 - 10:00 = 02:30 (hh: mm).

Currently, I have used the following codes for an interval, but it returns as minutes, etc. 12:30 - 10:00 = 150 minutes.

String timeOut = lblTimeOut.getText(); String timeIn = lblTimeIn2.getText(); SimpleDateFormat format = new SimpleDateFormat("hh:mm"); Date d1 = null; Date d2 = null; try { d1 = format.parse(timeOut); d2 = format.parse(timeIn); } catch (Exception e){ e.printStackTrace(); } long diff = d2.getTime() - d1.getTime(); long diffMinutes = diff / (60 * 1000); long diffHours = diff / (60 * 60 * 1000); lblSurface.setText(String.valueOf(diffMinutes)); 

How to get duration in hh:mm form?

I used Joda’s time and returned with an invalid format: “12:19” is distorted to “: 19”. As for the other buttons that cause the display time.

 DateFormat timeFormat = new SimpleDateFormat("hh:mm"); Date date = new Date(); String time = timeFormat.format(date); lblTimeIn2.setText(time); Timer timer = new Timer(1000, timerListener); // to make sure it doesn't wait one second at the start timer.setInitialDelay(0); timer.start(); } 

I don't know what is wrong, do I need to use Joda time to display the time for my other label?

+2
source share
3 answers

I personally used JodaTime as it takes into account things like the difference between days (i.e. the difference between 23: 30-02: 30) and has good built-in formats

 public class TestJodaTime { public static void main(String[] args) { DateTime start = new DateTime(2012, 11, 11, 23, 30, 0, 0); DateTime end = new DateTime(2012, 11, 12, 1, 30, 0, 0); Interval interval = new Interval(start, end); Period toPeriod = interval.toPeriod(); PeriodFormatter dateFormat = new PeriodFormatterBuilder() .printZeroAlways().minimumPrintedDigits(2) .appendHours().minimumPrintedDigits(2) .appendSeparator(":") .appendMinutes().minimumPrintedDigits(2) .toFormatter(); System.out.println(toPeriod.toString(dateFormat)); } } 

It will be displayed 02:00

Extended example

enter image description here

 public class TestJodaTime { public static void main(String[] args) { new TestJodaTime(); } public TestJodaTime() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { } catch (InstantiationException ex) { } catch (IllegalAccessException ex) { } catch (UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JodaPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class JodaPane extends JPanel { private JTextField startHour; private JTextField startMin; private JTextField endHour; private JTextField endMin; private JButton diffButton; private JLabel lblDiff; private JButton markStart; private JButton markEnd; private Timer timer; private JLabel realTime; public JodaPane() { markStart = new JButton("Mark"); markEnd = new JButton("Mark"); startHour = new JTextField(2); startMin = new JTextField(2); endHour = new JTextField(2); endMin = new JTextField(2); diffButton = new JButton("="); lblDiff = new JLabel("00:00"); realTime = new JLabel("00:00.00"); setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; add(new JLabel("From"), gbc); gbc.gridx++; add(startHour, gbc); gbc.gridx++; add(new JLabel(":"), gbc); gbc.gridx++; add(startMin, gbc); gbc.gridx++; add(markStart, gbc); gbc.gridx++; add(new JLabel(" to "), gbc); gbc.gridx++; add(endHour, gbc); gbc.gridx++; add(new JLabel(":"), gbc); gbc.gridx++; add(endMin, gbc); gbc.gridx++; add(markEnd, gbc); gbc.gridx++; add(diffButton, gbc); gbc.gridx++; add(lblDiff, gbc); gbc.gridy++; add(realTime, gbc); diffButton.addActionListener(new ActionListener() { public boolean isValid(JTextField field) { return field.getText() != null && field.getText().length() > 0; } @Override public void actionPerformed(ActionEvent ae) { if (isValid(startHour) && isValid(startMin) && isValid(endHour) && isValid(endMin)) { int hourStart = Integer.parseInt(startHour.getText()); int minStart = Integer.parseInt(startMin.getText()); int hourEnd = Integer.parseInt(endHour.getText()); int minEnd = Integer.parseInt(endMin.getText()); String prefix = ""; if (hourEnd < hourStart) { int tmp = hourStart; hourStart = hourEnd; hourEnd = tmp; prefix = "-"; } System.out.println("Start = " + hourStart + ":" + minStart); System.out.println("End = " + hourEnd + ":" + minEnd); DateTime start = new DateTime(0, 1, 1, hourStart, minStart, 0, 0); DateTime end = new DateTime(0, 1, 1, hourEnd, minEnd, 0, 0); Interval interval = new Interval(start, end); Period toPeriod = interval.toPeriod(); PeriodFormatter dateFormat = new PeriodFormatterBuilder() .printZeroAlways().minimumPrintedDigits(2) .appendHours().minimumPrintedDigits(2) .appendSeparator(":") .appendMinutes().minimumPrintedDigits(2) .toFormatter(); lblDiff.setText(prefix + dateFormat.print(toPeriod)); } } }); markStart.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { Calendar cal = Calendar.getInstance(); startHour.setText(Integer.toString(cal.get(Calendar.HOUR_OF_DAY))); startMin.setText(Integer.toString(cal.get(Calendar.MINUTE))); diffButton.doClick(); } }); markEnd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { Calendar cal = Calendar.getInstance(); endHour.setText(Integer.toString(cal.get(Calendar.HOUR_OF_DAY))); endMin.setText(Integer.toString(cal.get(Calendar.MINUTE))); diffButton.doClick(); } }); timer = new Timer(500, new ActionListener() { private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm.ss"); @Override public void actionPerformed(ActionEvent ae) { realTime.setText(sdf.format(new Date())); } }); timer.setRepeats(true); timer.setCoalesce(true); timer.start(); } } } 

Your questions are a bit vague, so I made a broad example. Mark, basically auto fills in the fields with the current time.

There is a little check;)

+3
source

When you get minutes, it also includes hours. Just divide the minutes by 60 to get the hours and update the minutes with the residual division value, as shown below.

  long diffMinutes = diff / (60 * 1000); //difference in minutes long diffHours = (long) diffMinutes/60; //get hours from diff minutes diffMinutes = diffMinutes % 60; //remainder of minutes after converting hours 

Finally, set the hours and minutes in the text:

  lblSurface.setText(diffHours + ":" + diffMinutes); 

Since a ":" added between them, this should be good due to the implicit conversion.

+2
source
 String.format("%1d:%2d", mins/60, (mins%60)) 

eg.

 public class HoursMinutesFormat { public static void main(String[] args) { int mins = 150; System.out.println(String.format("%1d:%2d", mins/60, (mins%60))); } } 

Output

 2:30 
+2
source

Source: https://habr.com/ru/post/1445834/


All Articles