2014-10-21 4 views
0

Я хотел бы представить 1 день с текущей даты как время эпохи. Сегодняшняя дата - 20 октября. Поэтому я хотел бы получить эпоху для завтрашнего дня. У меня есть код ниже -Время в Epoch Time в Java

Calendar cal = Calendar.getInstance(); 
    cal.setTime(new Date()); 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
    int time = (int) ((cal.getTimeInMillis())/1000); 
    System.out.println("TIME IS: " +time); 

Так что я в основном хочу добавить 1 день текущего день года т.е. окт 20, и представлять это как раз эпохи. Я показываю время в секундах, следовательно, деление на 1000. Результат для программы - 1413958770. 1 день с сегодняшнего дня будет 86400 секунд. Как точно работает эпоха? Я понимаю, что это дает время с 1970 года, но если это действительно так, значение не может быть таким маленьким :-). Я что-то упустил?

+3

Эпоха является фиксированной точкой во времени, которая представлена ​​'0'. Вам нужно будет вычесть сегодня миллисекундное представление из миллисекундного представления завтрашнего дня ... – MadProgrammer

+1

Почему вы думаете, что значение не может быть таким маленьким? (1413958770/86400) = 16365 дней. 16365/365 = 44 года. – BobTheBuilder

+0

Как @MadProgrammer говорит, что 'cal.getTimeInMillis()' дает вам номер Epoch; вам нужно получить оба числа: сегодняшнее число (по отношению к эпохе) и номер завтрашнего дня (по отношению к эпохе) и вычесть их – ochi

ответ

3

Если «сегодня» эпоха, то она должна «представлять» 0 любое время, измеренное от или по сравнению с «сейчас» следует вычесть из него, например ...

Calendar cal = Calendar.getInstance(); 
cal.setTime(new Date()); 
long now = cal.getTimeInMillis(); 
cal.add(Calendar.DAY_OF_YEAR, 1); 

long then = cal.getTimeInMillis(); 
long secondsFromEpoch = (then - now)/1000; 

System.out.println(secondsFromEpoch); 
+0

Perfect. Огромное спасибо. – rickygrimes

+0

@ rickygrimes Рад, что это помогло ... – MadProgrammer

4

Давайте сделаем некоторые основные математике:

  • минуту имеет 60 секунд
  • в час имеет 60 минут
  • день имеет 24 часа
  • год имеет 365 дней

    1413958770/(60 * 60 * 365 * 24) = 44,8 
    

(test it)

Добавить 44,8 лет в 1970 году, и вы будете в 2014. Так что нет ничего плохого.

+0

Perfect. Огромное спасибо. – rickygrimes

1

Время Unix или время POSIX или время Epoch - это система для описания моментов времени, определяемая как количество секунд, прошедших с 00:00:00. Скоординированное универсальное время (UTC), четверг, 1 января 1970 года, а не считая секунды прыжка.

В Java вы можете просто получить его, используя инструкцию ниже.

long current_time = System.currentTimeMillis() * 1000000L; 

или

long epoch = date.getTime(); 
0

Там были a couple dozen epochs используются различными компьютерными системами. Начало 1970 UTC является общим, но, конечно, не единственной эпохой в текущем использовании. И различные системы отслеживают время с эпохи, используя целые секунды, миллисекунды, микросекунды и наносекунды. Поэтому вместо использования неопределенного термина «время эпохи» было бы более полезно прямо сказать, что вы хотите. В этом случае, похоже, «целые секунды с начала 1970 года UTC до завтра».

Возможно, вам просто любопытно узнать математику и цифры. Но если вы серьезно относились к работе с датой, тогда я советую использовать библиотеку Joda-Time или пакет java.time в Java 8.

Часовой пояс имеет решающее значение при принятии сроков и определении начала дня.

Вот пример кода с использованием Joda-Time 2.5.

DateTimeZone zone = DateTimeZone.forID("Australia/Melbourne"); 
DateTime tomorrowStart = DateTime.now(zone).plusDays(1).withTimeAtStartOfDay(); 
long secondsSinceUnixEpoch = (tomorrowStart.getMillis()/1000); 
Смежные вопросы