Нахождение дня в секундах с начала эпохи, модуль не работает - PullRequest
1 голос
/ 10 марта 2012

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

public void method(Date date) {

...

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

...

}

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

Как мне исправить это?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

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

1 голос
/ 10 марта 2012

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

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

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

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

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

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

// 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();
...