2016-09-09 2 views
0

Я работаю над созданием приложения времени, которое вычисляет как текущее время, так и время, прошедшее с полуночи, 1 января 1970 года, в миллисекундах. Я пошел вперед и использовал Calendar и смог успешно вернуть текущее время, но по какой-то причине прошлое время возвращает 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; 
    } 
} 
+1

Side Примечание: Пожалуйста, сохраните себя от хлопот, если это возможно, и использовать 'java.time' библиотеку .. –

ответ

0

Вы не устанавливая elapsedTime для time2. Я думаю, что вы хотели

Time time2 = new Time(System.currentTimeMillis()); 

И, как указано в комментариях, вы не используете elapsedTime в конструкторе. Что-то вроде

public Time(long elapsedTime) { 
    secondsSinceEpoch = elapsedTime/1000; 
} 
+0

Это имеет смысл. Спасибо. – user3440443

+0

im уверен, что 'elapsedTime' никогда ничего не делает и бесполезен? – skeidsberget2365

+0

@ skeidsberget2365 'System.out.println (« Истекшее время с эпохи: »+ time2.getElapsedTime());' использует его. –

0

Я думаю, что вы используете неправильный конструктор для time2, так как вы назвали Time() и эта версия не установлена ​​secondsSinceEpoch. Попробуйте использовать другой конструктор Time(long elapsedTime) с любым длинным значением и посмотреть, работает ли он. Как это ..

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