Я знаю, что это покажется безумным, я почесал голову над этим прямо сейчас и почти уверен, что что-то упускаю.
Я вычисляю 'countOfMinutes', которые произошли с того моментадня по сравнению с текущим временем.Для этого я делаю следующее:
long startTime = System.currentTimeMillis();
// Below mod function gets code to start of the day
long lastStart = startTime - (startTime % (TimeUnit.DAYS.toMillis(1)));
long now = System.currentTimeMillis();
long minuteInMs = TimeUnit.MINUTES.toMillis(1);
countOfMinutes = (now - lastStart) / minuteInMs;
Это фрагмент кода, который у меня работает 24/7 и периодически перезапускается.У меня есть журналы из выходных данных, где я записываю значение «lastStart», «сейчас» и «countOfMinutes».Я использовал те же значения на моей локальной машине, и я получил ожидаемые значения.Но, глядя на журналы, те же самые значения приводят к 0. Я не могу понять, почему одни и те же числа приводят к различным значениям.
Вот журналы, которые у меня есть из работающей системы:
18:21:53.908 INFO [Thread-3] Adjusted start time= 1550102400000\n
18:21:53.908 INFO [Thread-3] Current time= 1550168520001\n
18:21:53.908 INFO [Thread-3] countOfMinutes based on start time= 0\n
Итак, я взял эти значения, побежал локально и получил то, что ожидал:
14:52:17.037 [main] INFO The difference is:66120001
14:52:17.041 [main] INFO value of countOfMinutes:1102
Я думал о чем-то с переполнением, но просто не уверен, насколько это возможно, это может произойти, некоторые извремя.Я не подозреваю, что журналы могут быть испорчены подобным образом, и метод toString () long показывает одно, а фактически другое.
Отредактировано: обновление с использованием действующего кода ПРИМЕЧАНИЕ. В реальном коде уже есть вещи, которые я идентифицирую, которые должныбыть обновленным.например, регистрация lastStart вместо startTime, если это то, что я собираюсь использовать в вычислениях, сохранение сейчас и последующее ведение журнала сейчас, а не вызов System.currentTime несколько раз, и другие.Я предполагаю, что с несоответствием в том, что регистрируется, и фактическими значениями переменных (которые мы не знаем), это может привести к этому, но кажется странным, что так и будет.Ниже код:
long startTime = System.currentTimeMillis();
long lastStart = startTime - (startTime % (TimeUnit.DAYS.toMillis(1)));
startTime = lastStart;
logger.info("Adjusted start time= {}", startTime); // Adjust start time to start of the day
long minuteInMs = TimeUnit.MINUTES.toMillis(1);
logger.info("Current time= {}", System.currentTimeMillis());
long now = System.currentTimeMillis();
long countOfMinutes = (now - lastStart) / minuteInMs;
logger.info("countOfMinutes based on start time= {}", countOfMinutes);