каляндар Java атрымаць бягучую дату, без гадзін, хвілін, секунд і мілісекунд, у мілісекундах

Я хацеў бы атрымаць бягучую дату ў мілісекундах з толькі год, месяц і дзень. Але калі я выкарыстоўваю гэты код:

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

Я да гэтага часу атрымліваю час у мілісекундах з гадзінай. Як я магу гэта выправіць?

// Андрэ

18

5 адказы

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

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

42
дададзена
дзякуй, гэта зрабіў!
дададзена аўтар just_user, крыніца
на Android ён даў мне ўчора (у поўнач)
дададзена аўтар Anthony, крыніца
@just_user сапраўдны адказ ...
дададзена аўтар Fred, крыніца
Ці прымалі вы клапаціцца пра сваё часавым поясе @Anthony?
дададзена аўтар Fred, крыніца

Калі вы хочаце толькі ў гэтым адносна GMT і відавочна проста хочаце мілісекунды, вы можаце выкарыстоўваць гэта:

long now = System.currentTimeMillis();
long today = now - now % 86400000;
8
дададзена

з JavaDoc : У HOUR_OF_DAY, ГАДЗІНА і AM_PM поля апрацоўваюцца незалежна адзін ад аднаго і правілы дазволу на час сутак прымяняюцца. Ачыстка аднаго з палёў не скідае гадзіну дня значэнне гэтага календара. З дапамогай набору (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, а таксама

5
дададзена
Am/PM - вось чаму вы выкарыстоўваеце Calendar.HOUR_OF_DAY як іншы прыклад робіць
дададзена аўтар Mifune, крыніца

ТЛ; інш

LocalDate.now()

<Код> LocalDate

If what you want is actually just the date without the time, use <Код> LocalDate class.

The <Код> LocalDate class represents a date-only value without time-of-day and without time zone.

Часовая зона мае вырашальнае значэнне пры вызначэнні даты. У любы дадзены момант, дата змяняецца па ўсім свеце па зонах. Напрыклад, праз некалькі хвілін пасля поўначы ў Парыж Францыя новы дзень у той жа час « учора »у Montréal Québec .

Пакажыце ўласнае час імя зоны ў фармаце кантынент/вобласць , такія як Амерыка/Манрэаль , Афрыка/Casablanca або Ціхі акіян/Окленд , Ніколі не выкарыстоўвайце 3-4 лісты абрэвіятуры, такія як EST або IST , як яны не Сапраўдныя гадзінныя паясы, ня стандартызаваны, і нават не ўнікальныя ( !).

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

<Код> ZonedDateTime

Калі вы хочаце дату з днём часу-наборам у першы момант дня, папытаеце java.time вызначыць гэты момант для вас. Не думайце, што першы момант у 00:00:00. Анамаліі, такія як летні час азначае першы момант можа адбыцца ў іншы час, напрыклад, як 01:00:00.

Use that time zone object, the ZoneId, to generate a <Код> ZonedDateTime object.

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

Пазбягайце састарэлыя класы даты і час

Пазбягайце неспакойныя старыя класы даты і час, такія як Каляндар . Гэта зараз спадчына, выціснулі класы java.time.


Аб java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda часу праекта, у цяперашні час у рэжым абслугоўвання , раіць міграцыі ў класы java.time .

Каб даведацца больш, глядзіце Oracle Tutorial . І пошук перапаўнення стэка для многіх прыкладаў і тлумачэнняў. Спецыфікацыя JSR 310 .

Дзе атрымаць класы java.time?

<моцны> ThreeTen-Extra <моцны /> Праект пашырае java.time з дадатковымі класамі , Гэты праект з'яўляецца палігонам для магчымых будучых дапаўненняў да java.time. Вы можаце знайсці некаторыя карысныя класы тут, такія як інтэрвал , <код > YearWeek , < код> YearQuarter і больш ,

4
дададзена

Калі вы хочаце выкарыстоўваць Joda час :

   long millis = new DateMidnight().getMillis();
3
дададзена