-4偏移后当前时间为负

时间:2013-06-29 02:48:26

标签: java

我是java的新手,我正在尝试将此程序编写为练习。程序采用当前时区偏移量并显示当前时间。但有些我的时间是消极的。我认为这里存在逻辑错误,但我找不到它。

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

我正在使用纽约(格林威治标准时间-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);

    }
}

2 个答案:

答案 0 :(得分:4)

  

我认为这里存在逻辑错误,但我无法找到它。

我认为逻辑错误是当您向"小时"添加负偏移时,您可能会在前一天结束一小时。 (并且存在相关问题。如果偏移量足够大,您可能会在下一个日结束一小时;即大于24小时"值大于24 ......用你的方法。)

简单的解决方法是:

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

如果你不知道'%' (余数)运算符,请阅读this

该页面没有提及(以及我忘记的内容)是剩余部分的符号......如果它是非零的......与被除数的符号相同。 (见JLS 15.17.3)。因此,我们需要在取余数之前添加24以确保正余数。

答案 1 :(得分:2)

你的问题几乎就在最后

currentHour = currentHour + offset;

想到这一点:如果当前小时为1且时间偏移为-4,你会得到什么?

你可以这样做:

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