Java:获取时间间隔 [英] Java: Getting time interval

查看:94
本文介绍了Java:获取时间间隔的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在一个项目中捕获间隔时间,单位为hh:mm。
我有2个按钮名为btnTimeOut& btnTimeIn都捕获系统时间点击。
要求是获取btnTimeOut和amp; btnTime in hh:mm等12:30 - 10:00 = 02:30(hh:mm)。



目前,我使用以下代码进行间隔,它返回分钟等。12:30 - 10:00 = 150分钟。

  String timeOut = lblTimeOut.getText() ; 
String timeIn = lblTimeIn2.getText();

SimpleDateFormat format = new SimpleDateFormat(hh:mm);

日期d1 = null;
日期d2 = null;

try {
d1 = format.parse(timeOut);
d2 = format.parse(timeIn);
}
catch(异常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));

如何获取窗体 hh:mm



我使用了Joda时间并返回无效格式:12:19在:19格式错误。
对于触发显示时间的其他按钮。

  DateFormat timeFormat = new SimpleDateFormat(hh:mm ); 
Date date = new Date();
String time = timeFormat.format(date);
lblTimeIn2.setText(time);

定时器定时器=新的定时器(1000,timerListener);
//确保它在开始时不等待一秒
timer.setInitialDelay(0);
timer.start();
}

我不知道是什么错,我需要使用joda时间为了显示我的其他标签的时间?

解决方案

我个人会使用 JodaTime ,因为它考虑到日子之间的差异(即23:30-02:30之间的区别),并且有很好的内置格式化程序

  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);
间隔间隔=新间隔(开始,结束);
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));
}
}

哪个将输出 02: 00



扩展示例



  
public static void main(String [] args){
new TestJodaTime();
}

public TestJodaTime(){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
尝试{
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扩展JPanel {

private JTextField startHour;
private JTextField startMin;
private JTextField endHour;
private JTextField endMin;
private JButton diffButton;
私人JLabel lblDiff;
私人JButton markStart;
私人JButton markEnd;
私人定时器定时器;
私人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);
间隔间隔=新间隔(开始,结束);
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){
日历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){
日历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();


}

}

}

你的问题有点模糊,所以我做了一个很好的例子。标记,基本上自动填充当前时间的字段。



几乎没有验证;)


I am on a project to capture the interval time in hh:mm. I have 2 buttons named btnTimeOut & btnTimeIn both capturing the system time when clicked. The requirement is to get the interval between the btnTimeOut & btnTime in hh:mm, etc. 12:30 - 10:00 = 02:30 (hh:mm).

Currently I used the following codes for the 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 the duration in the form hh:mm?

I used Joda time and return with Invalid format: "12:19" is malformed at ":19". As for my other buttons which trigger 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've no idea what is wrong, do I need to use joda time for displaying time for my other label too?

解决方案

I, personally, would use JodaTime as it takes into account things like difference between days (ie the difference between 23:30-02:30) and has nice inbuilt formatters

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));
    }
}

Which will output 02:00

Extended example

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 a little vague, so I've done a wide example. Mark, basically auto fills the fields with the current time.

There is little validation ;)

这篇关于Java:获取时间间隔的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆