Другими словами, мне нужна функциональность, предоставляющая Joda-Time:
today = today.withTime(0, 0, 0, 0);
но без Joda-Time, только с java.util.Date.
Методы, такие как .setHours() и т.д., устарели. Есть ли более правильный способ?
Другими словами, мне нужна функциональность, предоставляющая Joda-Time:
today = today.withTime(0, 0, 0, 0);
но без Joda-Time, только с java.util.Date.
Методы, такие как .setHours() и т.д., устарели. Есть ли более правильный способ?
Date today = new Date();
today.setHours(0); //same for minutes and seconds
Поскольку методы устарели, вы можете сделать это с помощью Calendar
:
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0); // same for minutes and seconds
И если вам нужен объект Date
в конце, просто вызовите today.getTime()
Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
DateUtils от Apache Commons-Lang. Следите за часовым поясом!
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
найдено здесь
Есть ли более правильный способ?
Да, есть.
LocalDate.now(
ZoneId.of( "America/Montreal" )
).atStartOfDay(
ZoneId.of( "America/Montreal" )
)
Java 8 и более поздние версии теперь имеют новую встроенную среду java.time. См. Tutorial. Вдохновленный Joda-Time, определенный JSR 310 и расширенный проектом ThreeTen-Extra.
Ниже приводятся некоторые примеры, используя java.time. Обратите внимание, как они определяют часовой пояс. Если этот параметр опущен, ваш текущий часовой пояс по умолчанию JVM. Это значение по умолчанию может меняться, даже изменяясь в любой момент во время выполнения, поэтому я предлагаю вам указать часовой пояс явно, а не полагаться неявно на значение по умолчанию.
Вот пример даты-только, без времени суток или часового пояса.
ZoneId zonedId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zonedId );
System.out.println( "today : " + today );
сегодня: 2015-10-19
Ниже приведен пример получения текущего времени.
ZoneId zonedId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zonedId );
System.out.println( "zdt : " + zdt );
При запуске:
zdt: 2015-10-19T18: 07: 02.910-04: 00 [Америка/Монреаль]
Вопрос задает дату, когда время установлено на ноль. Это предполагает, что первым моментом дня всегда является время 00:00:00.0
, но это не всегда так. Летнее время (DST) и, возможно, другие аномалии означают, что день может начинаться в другое время, например 01:00.0
.
К счастью, java.time имеет средство, чтобы определить первый момент в день, соответствующий конкретной временной зоне, LocalDate::atStartOfDay
. Посмотрите код, используя LocalDate
с именем today
и ZoneId
с именем ZoneId
из приведенного выше кода.
ZonedDateTime todayStart = today.atStartOfDay( zoneId );
zdt: 2015-10-19T00: 00: 00-04: 00 [Америка/Монреаль]
Если у вас должен быть java.util.Date для использования с классами, еще не обновленными для работы с типами java.time, конвертируйте. Вызовите метод java.util.Date.from( Instant instant )
.
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Если вы хотите полночь (0:00 утра) для текущей даты, вы можете просто использовать конструктор по умолчанию и обнулить части времени:
Date today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0);
изменить: обновить с помощью Calendar
, поскольку эти методы устарели
Calendar today = Calendar.getInstance();
today.clear(Calendar.HOUR); today.clear(Calendar.MINUTE); today.clear(Calendar.SECOND);
Date todayDate = today.getTime();
Используйте этот код;
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Это будет отображаться как:
5 февраля 2013 г. 12:39:02
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;
/**
* * Java Program to get current day, month, year, and dayOfweek in both Java 8
* * and before e.g. JDK 1.6 and JDK 1.7
*/
/**
* @author AJMAL SHA
*
*/
public class Test {
public static void main(String[] args) { // Before Java 8
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(today); // don't forget this if date is arbitrary
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1 being Sunday
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
int month = cal.get(Calendar.MONTH); // 0 being January
int year = cal.get(Calendar.YEAR);
System.out.println("current date : " + today);
System.out.println("dayOfWeek from date in Java 6 : " + dayOfWeek);
System.out.println("dayOfMonth from a date in Java 7 : " + dayOfMonth);
System.out.println("dayOfYear from a date in Java 1.6 : " + dayOfYear);
System.out.println("month from a date in Java 1.7 : " + month);
System.out.println("year from date in JDK 6 : " + year); // In Java 8
LocalDate currentDate = LocalDate.now();
DayOfWeek dow = currentDate.getDayOfWeek();
int dom = currentDate.getDayOfMonth();
int doy = currentDate.getDayOfYear();
Month m = currentDate.getMonth();
int y = currentDate.getYear();
System.out.println("current local date : " + currentDate);
System.out.println("dayOfWeek from a date in Java 8 : " + dow);
System.out.println("dayOfMonth from date in JDK 8: " + dom);
System.out.println("dayOfYear from a date in Java SE 8 : " + doy);
System.out.println("month from a date in Java 1.8 : " + m);
System.out.println("year from date in JDK 1.8 : " + y);
}
}
Output..
current date : Sun Feb 19 06:38:16 PST 2017
dayOfWeek from date in Java 6 : 1
dayOfMonth from a date in Java 7 : 19
dayOfYear from a date in Java 1.6 : 50
month from a date in Java 1.7 : 1
year from date in JDK 6 : 2017
current local date : 2017-02-19
dayOfWeek from a date in Java 8 : SUNDAY
dayOfMonth from date in JDK 8: 19
dayOfYear from a date in Java SE 8 : 50
month from a date in Java 1.8 : FEBRUARY
year from date in JDK 1.8 : 2017