Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Разбить время в миллисекундах на дни/часы/минуты

#время #java


Имеется время

long lasttime = getLastLogin(user);

Надо вычесть из текущего времени (System.currentTimeMillis()) время lasttime и полученный
результат разбить на дни, часы и минуты, чтобы узнать, какое время пользователя нет в сети.
Обновление
У меня что-то вроде этого, но я сильно сомневаюсь в точности:
long em = (long)((System.currentTimeMillis()-lp) / 1000 / 60L);//min ::
int eh = (int)((em*60)-(int)(em/60));//hour ::
int ed = (int)((em*60*24)-(int)(em/60/24));//day
    


Ответы

Ответ 1



Можно воспользоваться такими дивными вещами, как Calendar и SimpleDataFormat. Вот пример рабочий: import java.text.SimpleDateFormat; import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar dating = Calendar.getInstance(); SimpleDateFormat formating = new SimpleDateFormat("YYYY:MM:dd:HH:mm:ss:SSS"); System.out.println( formating.format(dating.getTime()) ); } } В результате выполнения мы получим: "2014:07:29:10:22:49:824" (Результат с теста кода). Думаю, код понятен, но стоит сказать по поводу конструктора класса SimpleDataFormat. Вот здесь Описаны все ключи, которые можно использовать в форматировании. Вместо двоеточих можно использовать точки и другие символы. Например: "YYYY/MM/dd" Выводит: 2014/07/29 "dd MMM YYYY" Выдаст 29 Jul 2014 На заметку SimpleDataFormat хорошо работает и с результатом метода System.currentTimeMillis(), а вот как определять дату, через календарь, или через систему - решать вам. Стоит отметить, что Calendar имеет такие свойства, как DAY_OF_WEEK, MONDAY и т.д. Вот с ними и надо оперировать, что бы узнать разницу между точками отрезка во времени. Конечно, код ниже не является номинантом на "панацею от проблем", но всё же решает данную задачу. import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) throws InterruptedException { /* Дата, которую сохранили */ Calendar SaveData = Calendar.getInstance(); /* промежуток: тест - 6 секунд */ Thread.sleep(6000); /* текущая дата */ Calendar CurrentData = Calendar.getInstance(); /* вычисляем */ Calendar calculate = Calendar.getInstance(); calculate.setTime(new Date(CurrentData.getTime().getTime() - SaveData.getTime().getTime())); /* Здесь станцуем с бубном, мы получим количество часов, поэтому ручками */ System.out.println(((calculate.get(Calendar.DAY_OF_YEAR) - 1 ) * 24) + (calculate.get(Calendar.HOUR_OF_DAY) - 11) + ":" + calculate.get(Calendar.MINUTE) + ":" + calculate.get(Calendar.SECOND)); } } В результате выполнения мы получим 0:0:6 (то есть 6 секунд). Думаю, код понятен. (тестил - работает). Думаю, что не сложно будет разобраться и с тем, как получить количество дней. Но ещё сделаю заметку. Для идеала надо учитывать и года, так как календарь имеет ограничения по дням, но это не сложно; поэтому, думаю, данную задачу уже решишь ты.

Комментариев нет:

Отправить комментарий