@Ezekiel4
Охотник на пиратов и сборщик монолитов

В чём ошибка алгоритма (вычисление времени из currentTimeMillis)?

Нужно выводить строку формата:
[HH:MM:SS] LEVEL: text

Проблема в том, что время отстаёт на 3 часа от реального. Да, можно просто прибавить 3 часа, но хотелось бы понять в чём причина.
void log(String level, String text) {
	int h, m, s;

	s = (int) ((System.currentTimeMillis() % (1000 * 60 * 60 * 24)) / 1000);
	s -= (h = s / 3600) * 3600;
	s -= (m = s / 60) * 60;

	System.out.printf("[%02d:%02d:%02d] %s: %s\n", h, m, s, level, text);
}
  • Вопрос задан
  • 108 просмотров
Решения вопроса 2
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Как отметил коллега, проблема заключается в часовом поясе.
https://www.tutorialspoint.com/java/lang/system_cu...

System.currentTimeMillis()
This method returns the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC(coordinated universal time).


Date date = new Date(System.currentTimeMillis());
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
format.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
String result = format.format(date);
System.out.println(result);


Вот, так можно UTC конвертировать.
Вывод:
2021-06-13T19:35:35
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
Я предпочитаю использовать Instant.
Вот крутой ответ на SO чем Instant отличается от LocalDateTime: https://stackoverflow.com/questions/32437550/whats...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы