我是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);
}
}
答案 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;