РЕДАКТИРОВАТЬ: Согласно комментарию Алекса, возможно, что проблемы с запуском вашего кода ослепили меня к вашей реальной цели.
A Date
представляет собой мгновение во времени.Это может приходиться на разные даты в зависимости от часового пояса, но как вы хотите, чтобы это повлияло на вещи?Вы хотите количество дней с начала эпохи Unix (всегда UTC) или количество дней с 1 января 1970 года в определенном часовом поясе?Почему вы хотите использовать это «количество дней» вместо представления даты, такой как LocalDate
?Какой здесь вариант использования?
РЕДАКТИРОВАТЬ: Если вы просто хотите узнать количество дней со времен Unix, вы можете пропустить большую часть этого:
days = dateObj.getTime() / (24 * 60 * 60 * 1000);
Вы не должныне проходить форматирование вообще, чтобы получить год / месяц / день.Просто создайте Calendar
, установите соответствующий часовой пояс, наберите setTime
с уже набранным dateObj
, а затем очистите часть часа / минуты / секунды календаря.
Однако,Вы должны явно указать, какой часовой пояс вы хотите рассмотреть - Date
представляет момент во времени, что будет означать разные даты в разных часовых поясах.
Вам также следует рассмотреть возможность использования Joda Time , которая делает все это проще и имеет определенный тип для дат (LocalDate
).Это также позволило бы легко определить количество дней между эпохой Unix и конкретной датой без самостоятельного разделения.