显示自纪元以来经过的时间
Displaying time elapsed since epoch
我正在创建一个时间应用程序,它可以计算当前时间和自 1970 年 1 月 1 日午夜以来经过的时间(以毫秒为单位)。我继续使用日历并能够成功 return 当前时间,但由于某种原因,经过的时间 returns 0。不确定为什么会这样。
这是我当前的代码:
import java.util.Calendar;
import java.util.TimeZone;
public class TimeApp {
public static void main(String[] args) {
Time time1 = new Time();
System.out.println("Hour: " + time1.getHour() + " Minute: " +
time1.getMinute() + " Second: " + time1.getSecond());
Time time2 = new Time();
System.out.println("Elapsed time since epoch: " + time2.getElapsedTime());
}
}
final class Time {
private int hour;
private int minute;
private int second;
private long secondsSinceEpoch;
public Time() {
Calendar calendar = Calendar.getInstance();
this.second = calendar.get(Calendar.SECOND);
this.minute = calendar.get(Calendar.MINUTE);
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
}
public Time(long elapsedTime) {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.clear();
calendar.set(2016, Calendar.SEPTEMBER, 9);
secondsSinceEpoch = calendar.getTimeInMillis() / 1000L;
}
@Override
public String toString() {
return hour + ":" + minute + ":" + second;
}
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
public long getElapsedTime() {
return secondsSinceEpoch;
}
}
您没有为 time2
设置 elapsedTime
。我想你想要
Time time2 = new Time(System.currentTimeMillis());
And 如评论中所指出的,您没有在构造函数中使用 elapsedTime
。像
public Time(long elapsedTime) {
secondsSinceEpoch = elapsedTime / 1000;
}
我认为你为 time2
使用了错误的构造函数,因为你调用了 Time()
而这个版本没有设置 secondsSinceEpoch
。尝试将其他构造函数 Time(long elapsedTime)
与任何 long 值一起使用,看看它是否有效。
像这样..
Time time2 = new Time(10000);
然后重写这个构造函数,因为你永远不会使用 elapsedTime
,或者完全删除它并重写第一个构造函数来为 secondsSinceEpoch
.
赋值
public Time() {
Calendar calendar = Calendar.getInstance();
this.second = calendar.get(Calendar.SECOND);
this.minute = calendar.get(Calendar.MINUTE);
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
secondsSinceEpoch = calendar.getTimeInMillis() / 1000L;
}
我正在创建一个时间应用程序,它可以计算当前时间和自 1970 年 1 月 1 日午夜以来经过的时间(以毫秒为单位)。我继续使用日历并能够成功 return 当前时间,但由于某种原因,经过的时间 returns 0。不确定为什么会这样。
这是我当前的代码:
import java.util.Calendar;
import java.util.TimeZone;
public class TimeApp {
public static void main(String[] args) {
Time time1 = new Time();
System.out.println("Hour: " + time1.getHour() + " Minute: " +
time1.getMinute() + " Second: " + time1.getSecond());
Time time2 = new Time();
System.out.println("Elapsed time since epoch: " + time2.getElapsedTime());
}
}
final class Time {
private int hour;
private int minute;
private int second;
private long secondsSinceEpoch;
public Time() {
Calendar calendar = Calendar.getInstance();
this.second = calendar.get(Calendar.SECOND);
this.minute = calendar.get(Calendar.MINUTE);
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
}
public Time(long elapsedTime) {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.clear();
calendar.set(2016, Calendar.SEPTEMBER, 9);
secondsSinceEpoch = calendar.getTimeInMillis() / 1000L;
}
@Override
public String toString() {
return hour + ":" + minute + ":" + second;
}
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
public long getElapsedTime() {
return secondsSinceEpoch;
}
}
您没有为 time2
设置 elapsedTime
。我想你想要
Time time2 = new Time(System.currentTimeMillis());
And 如评论中所指出的,您没有在构造函数中使用 elapsedTime
。像
public Time(long elapsedTime) {
secondsSinceEpoch = elapsedTime / 1000;
}
我认为你为 time2
使用了错误的构造函数,因为你调用了 Time()
而这个版本没有设置 secondsSinceEpoch
。尝试将其他构造函数 Time(long elapsedTime)
与任何 long 值一起使用,看看它是否有效。
像这样..
Time time2 = new Time(10000);
然后重写这个构造函数,因为你永远不会使用 elapsedTime
,或者完全删除它并重写第一个构造函数来为 secondsSinceEpoch
.
public Time() {
Calendar calendar = Calendar.getInstance();
this.second = calendar.get(Calendar.SECOND);
this.minute = calendar.get(Calendar.MINUTE);
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
secondsSinceEpoch = calendar.getTimeInMillis() / 1000L;
}