2013-06-29 52 views
1

我是新來的Java後-4,我試圖寫這個程序的做法。該程序採用當前時區偏移量並顯示當前時間。但有些時候我的時間會消極。我認爲這裏有一個邏輯錯誤,但我找不到它。的CURREN時間是負偏移

Enter the time zone offset to GMT: -4 
The current time: -2:48:26 

我使用的紐約(GMT -4小時)

// A program that display the current time, with the user input a offset 

import java.util.Scanner; 

class CurrentTime { 
    public static void main(String[] args) { 
     // Create a Scanner object 
     Scanner input = new Scanner(System.in); 
     long totalMillSeconds = System.currentTimeMillis(); 

     long totalSeconds = totalMillSeconds/1000; 
     long currentSecond = (int)totalSeconds % 60; 

     long totalMinutes = totalSeconds/60; 
     long currentMinute = totalMinutes % 60; 

     long totalHours = totalMinutes/60; 
     long currentHour = totalHours % 24; 

     // Prompt user to ask what is the time zone offset 
     System.out.print("Enter the time zone offset to GMT: "); 
     long offset = input.nextLong(); 

     // Adjust the offset to the current hour 
     currentHour = currentHour + offset; 
     System.out.print("The current time: " + currentHour + ":" 
       + currentMinute + ":" + currentSecond); 

    } 
} 

回答

4

我認爲在這裏的邏輯錯誤,但我不能找到它。

我認爲這個邏輯錯誤是,當你給「小時」添加一個負偏移量時,你可能會在前一天得到一個小時。 (而且還有一個相關的問題,如果失調足夠大,你可以用在未來天一小時結束;即,「小時」值大於24 ...您的方法。)

簡單的解決方法是這樣的:

currentHour = (currentHour + offset + 24) % 24; // updated ... 

如果你不知道「%」(餘)運營商做什麼,讀this

該頁面沒有提到什麼(什麼我忘了)是餘數的符號...如果它是非零...是一樣的被除數的符號。 (見JLS 15.17.3)。因此,我們需要考慮其餘確保良好的剩餘部分之前添加24

2

你的問題是在該行幾乎在最後

currentHour = currentHour + offset; 

想到這一點:如果當前的小時1和時間偏移是-4,你會得到什麼?

你可以這樣做:

currentHour = (currentHour + offset + 24) % 24;