Java календарь получает текущую дату, без часов, минут, секунд и миллисекунд, в миллисекундах - PullRequest
19 голосов
/ 28 октября 2011

Я бы хотел получить текущую дату в миллисекундах, указав только год, месяц и дату. Но когда я использую этот код:

Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
currentDate = cal.getTimeInMillis();

Я все еще получаю время в миллисекундах с часом. Как я могу это исправить?

Ответы [ 5 ]

49 голосов
/ 28 октября 2011
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
currentDate = cal.getTimeInMillis();

Будьте осторожны с часовым поясом вашего Календаря.

8 голосов
/ 28 октября 2011

Если вам нужно только это относительно GMT и явно хотите миллисекунды, вы можете использовать это:

long now = System.currentTimeMillis();
long today = now - now % 86400000;
6 голосов
/ 28 октября 2011

из javadoc : Поля HOUR_OF_DAY, HOUR и AM_PM обрабатываются независимо, и применяется правило разрешения для времени суток. Очистка одного из полей не сбрасывает значение часа в календаре. Используйте set (Calendar.HOUR_OF_DAY, 0) для сброса значения часа.

cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

также может потребоваться установить AM / PM

4 голосов
/ 26 апреля 2017

ТЛ; др

LocalDate.now()

LocalDate

Если на самом деле вам нужна только дата без времени, используйте LocalDate class.

Класс LocalDate представляет значение только для даты без времени суток и без часового пояса.

Часовой пояс имеет решающее значение при определении даты. В любой момент времени дата меняется по всему земному шару в зависимости от зоны. Например, через несколько минут после полуночи в Париж Франция - это новый день, а еще «вчера» в Монреаль Квебек .

Укажите собственное имя часового пояса в формате continent/region, например America/Montreal, Africa/Casablanca или Pacific/Auckland. Никогда не используйте 3-4-буквенное сокращение, такое как EST или IST, поскольку они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

ZonedDateTime

Если вы хотите, чтобы дата с временем суток была установлена ​​на первый момент дня, попросите java.time определить этот момент для вас. Не думайте, что первый момент в 00:00:00. Аномалии, такие как переход на летнее время, означают, что первый момент может возникнуть в другое время, например 01:00:00.

Используйте этот объект часового пояса, ZoneId, для создания ZonedDateTime объекта.

ZonedDateTime zdt = today.atStartOfDay( z );  // Determine the first moment of the day on this date for this time zone.

Чтобы просмотреть этот момент в качестве значения в формате UTC, извлеките объект Instant.

Instant instant = zdt.toInstant();

Избегайте устаревших классов даты и времени

Избегайте проблемных старых классов даты и времени, таких как Calendar. Теперь они унаследованы, заменены классами java.time.


О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat

Проект Joda-Time , который теперь находится в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

3 голосов
/ 28 октября 2011

Если вы хотите использовать Время Joda :

   long millis = new DateMidnight().getMillis();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...