java 取两个时间间隔_Java:获取时间间隔

我正在进行一个以hh:mm捕获间隔时间的项目.

我有2个名为btnTimeOut&的按钮. btnTime在单击时捕获系统时间.

要求是获得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");

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

如何以hh:mm的形式获得持续时间?

我使用了Joda时间并以无效格式返回:“12:19”格式错误为“:19”.

至于触发显示时间的其他按钮.

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

}

我不知道出了什么问题,我是否需要使用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);

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

}

}

哪个会输出02:00

扩展示例

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

}

}

}

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

几乎没有验证;)

标签:java,date,swing,date-format

来源: https://codeday.me/bug/20190928/1825252.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值