2012-03-10 2 views
1

У меня есть следующий код, чтобы попытаться получить текущий день в секундах с начала эпохи, путем удаления секунд после 00:00:00 в любой день:Найдя день в секундах с начала эпохи, модуль не работает

public void method(Date date) { 

... 

long dayDate = date.getTime() - (date.getTime() % 86400L); 

... 

} 

По какой-то причине dayDate просто устанавливается на date.getTime(), и математические операторы здесь ничего не делают.

Как я могу это исправить?

+1

[Давай ...] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Date.html) «Возвращает количество ** миллисекунд ** с 1 января 1970 года, 00:00:00 по Гринвичу представленный этим объектом 'Date'. –

ответ

1

Как Игнасио уже отмечалось, date.getTime() возвращает количество миллисекунд с 1 января 1970 года, так что ваша линия должна быть:

long dayDate = date.getTime() - (date.getTime() % 86400000L); 

Iif вы планируете создать новый Date с dayDate, убедитесь, что он имеет правильный часовой пояс, например это должно быть в часовой пояс UTC/GMT. В противном случае, странные вещи, как это могло произойти:

Date epoch = new Date(0); 
System.err.println(epoch); 

, который дает на моей машине Thu Jan 01 01:00:00 CET 1970, потому что мои даты, по умолчанию, созданный в ЕТТ (+1) часовой пояс. Поэтому, если вы будете использовать свой код, и вы создадите новый экземпляр Date, используя длинный вычисленный вами результат, вы получите дату не в 0:00 в этот день, а в 1:00.

Однако, не сразу прибегать к Joda времени (который не может быть вариант в вашем проекте), вы можете использовать календарь, чтобы получить количество секунд:

// Create the calendar and set the date. 
Calendar calendar = new GregorianCalendar(); 
calendar.setTime(date); 

// Set the hours, minutes, etc. to 0. 
calendar.set(Calendar.HOUR, 0); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
calendar.set(Calendar.MILLISECOND, 0); 
calendar.set(Calendar.AM_PM, Calendar.AM); 

long dayDate = calendar.getTime(); 
2

Я рекомендую вам использовать библиотеку Joda Time. Он имеет большинство функций, связанных с датой, временем и календарем, которые вам когда-либо понадобятся.

Смежные вопросы