java hh mm ss_java - Java如何从日期获取HH:mm:ss - 堆栈内存溢出

这篇博客讨论了作者在Java中创建秒表应用的过程,包括将时间显示为小时、分钟和秒。作者还希望通过用户定义的时间间隔触发警报,并使用JSpinner和单选按钮来设定闹钟。博客中提到了对JSpinner日期格式的困扰,需要将其转换为仅显示HH:mm:ss格式以便与秒表时间比较。作者寻求帮助以解析和比较时间值来触发警报。
摘要由CSDN通过智能技术生成

对于我的第一个Java应用程序,我正在制作秒表。 秒表将过去的时间显示为小时,分钟和秒。 像这样00:00:00

我希望在经过一定时间(用户定义)后显示一个警报(警报框,无论如何)。

这是生成秒表显示的代码(忽略分秒,我们不会为闹钟担心):

swChronometer = new Timer(10, new ActionListener() {

public void actionPerformed(ActionEvent e) {

int decisec = (int)(System.currentTimeMillis() - swWatchStart) / 10; // 10 x millisecond

int seconds = decisec / 100;

int days = seconds / 86400; // 86400 seconds in a day

int hours = (seconds / 3600) - (days * 24); // 3600 seconds in a hour

int min = (seconds / 60) - (days * 1440) - (hours * 60); // 60 seconds in a min

int sec = seconds % 60;

int decis = decisec % 100;

//------------------------------------------------------- format the ints

DecimalFormat formatter = new DecimalFormat("00");

String hoursFormatted = formatter.format(hours);

String minFormatted = formatter.format(min);

String secFormatted = formatter.format(sec);

String decisFormatted = formatter.format(decis);

//------------------------------------------------------- update display

String s = new String(""+hoursFormatted+":"+minFormatted+":"+secFormatted+"");

String sDs = new String(decisFormatted);

swDisplayTimeLabel.setText(s);

swDisplayDeciseconds.setText(sDs);

}

});

如您所见,Timer int最终会转换为字符串,然后显示出来。

After和Every都有单选按钮-因此在n个时间段或每n个时间段后发出警报。

我有一个JSpinner,因此用户可以定义n时间,其格式设置为仅显示00:00:00:

// ----------------------------------

// set spinner format

// ----------------------------------

// inital date at 12pm 00:00:00

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, 24); // 24 == 12 PM == 00:00:00

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

swSpinnerTime.setValue(calendar.getTime());

// format field

JSpinner.DateEditor editor = new JSpinner.DateEditor(swSpinnerTime, "HH : mm : ss");

DateFormatter formatter = (DateFormatter)editor.getTextField().getFormatter();

formatter.setAllowsInvalid(false); // sets it so user cant edit colon

formatter.setOverwriteMode(true);

swSpinnerTime.setEditor(editor);

还有一个组合框,因此用户可以选择什么类型的警报。

每当用户对这些输入中的任何一个进行操作时,就会调用我的函数来处理它:

private void swAlarmSettings() {

//------------------------------------------------------- which radio is selected

String swRadioText = "";

if(swRadioAfter.isSelected()) {

swRadioText = swRadioAfter.getText();

}

if(swRadioEvery.isSelected()) {

swRadioText = swRadioEvery.getText();

}

// debug

System.out.println("Radio Selected: " +swRadioText);

//------------------------------------------------------- which time is selected

Date swSpinnerTimeValue;

swSpinnerTimeValue = (Date)swSpinnerTime.getValue();

// debug

System.out.println("swSpinnerTimeValue: " +swSpinnerTimeValue);

//------------------------------------------------------- which alarm is selected

String swDropDownSelected = (String)swDropDown.getSelectedItem();

// debug

System.out.println("swDropDownSelected: " +swDropDownSelected);

}

但是,每当调用此函数时,它都会将日期打印为:

swSpinnerTimeValue: Tue Oct 14 00:00:00 BST 2014

所以这就是我坚持如何进行的地方。 当我在JSpinner中格式化日期时,我并不希望显示整个日期(即使日期不正确(今天是10月13日,而不是14日))。

所以我想我需要以某种方式解析该值,去除不需要的数据,所以只剩下HH:mm:ss,然后将其转换为字符串,以便可以将其与秒表进行比较显示(字符串swDisplayTimeLabel),然后在匹配时触发警报。

我希望我已经使查询清楚并且提供了足够的信息。 谢谢你的帮助。

我正在Netbeans中工作,并使用Swing设计部分来创建我的应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值