我有一个代码,显示我运行应用程序时的当前日期和时间
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
现在它告诉我:2012/12/11 00:36:53我跑的时候。
但是我希望它能够计算出它的运行时间。
所以现在通过示例,当我在00:37:53运行它时,它显示了这个时间,但是我想在00:37:53开始,并且我在00:40:55停止运行它。我希望它能告诉我00:37:53,00:37:54,00:37:55等等。
现在我该怎么做?
答案 0 :(得分:6)
如何使用计时器,例如javax.swing.Timer
? (不要在导入时出错,还有更多的Timer类。)
public static void main(String... args) throws InterruptedException {
final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int interval = 1000; // 1000 ms
new Timer(interval, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Calendar now = Calendar.getInstance();
System.out.println(dateFormat.format(now.getTime()));
}
}).start();
Thread.currentThread().join();
}
这将只是每秒执行一次ActionListener的主体,打印当前时间。
最后一行的Thread.join
调用并非普遍需要,只需要运行此示例代码,直到手动停止该进程。否则,它会立即停止。
在实际的应用程序中,如果它是一个Swing应用程序,那么计时器应该自己处理线程,所以你不必担心它。
将上述示例集成到您的应用程序中非常简单,只需将其添加到initGUI
方法中,而不是将当前时间打印到System.out set,更改给定标签的文本:
public void initGUI() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800, 600));
setLayout(null);
Calendar now = Calendar.getInstance();
tijd = new JLabel(dateFormat.format(now.getTime()));
tijd.setBounds(100, 100, 125, 125);
window.add(tijd);
new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Calendar now = Calendar.getInstance();
tijd.setText(dateFormat.format(now.getTime()));
}
}).start();
pack();
}
答案 1 :(得分:2)
您没有提及用户界面的技术平台,例如Swing,SWT,Vaadin,网络等。所以我不会解决这些问题。这里的基本方法适用于所有UI技术。
两个基本想法:
对于Swing,Swing Timer可能是合适的(不确定该技术的当前状态)。但除此之外,学习如何使用ScheduledExecutorService
让一个单独的线程重复捕获当前时刻。搜索Stack Overflow以了解有关Executor
的更多信息。
使用Instant
类以UTC为单位捕获时间轴上的当前时刻,分辨率最高可达纳秒。
Instant now = Instant.now();
将该对象传递给UI线程。
在UI线程上,应用用户所需/预期的时区ZoneId
以生成ZonedDateTime
。
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZobedDateTime zdt = instant.atZone( z ) ;
如果您需要字符串来表示该日期时间调用toString
或使用DateTimeFormatter
。请注意ofLocalized…
上的DateTimeFormatter
方法。
搜索Stack Overflow以获取更多详细信息,包括数百个相关问题和解答。
答案 2 :(得分:1)
你可以试试这个,
<script>
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
if (h < 10) { h = '0' + h }
if (m < 10) { m = '0' + m }
if (s < 10) { s = '0' + s }
var ctoday = dd + '/' + mm + '/' + yyyy+ '\t' +h+ ':' +m+ ':' +s;
var d = new Date()
var weekday = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
console.log("Today is " + weekday[d.getDay()])
document.getElementById('time').innerHTML = '<span style="color:blue">' + weekday[d.getDay()] + ", " + ctoday + '</span>';
</script>
<div>
<span> Today is : <span id="time"> </span>
</div>
您可以运行此程序并获取输出。
有关java中日期和时间的更多信息,请参阅以下链接,
https://docs.oracle.com/javase/tutorial/datetime/iso/datetime.html
https://docs.oracle.com/javase/7/docs/api/java/sql/Date.html
答案 3 :(得分:0)
使用简单的日期格式化程序,格式为hh:mm。
SimpleDateFormat sdf = new SimpleDateFormat("HH:MM a");
答案 4 :(得分:0)
添加一个带有递增语句的循环,因此时钟将保持滴答,直到给定条件。
答案 5 :(得分:0)
public void ShowTime() {
new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Date d = new Date();
SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyy hh:mm:ss a");
time.setText(s.format(d)); //time= jlabel
}
}).start();
}
连续更改时间(每秒刷新一次)