Я хочу получить Year, Month, Day и т.д. Из Java Date для сравнения с григорианской датой календаря на Java. Это возможно?
У меня есть объект Date в Java, который хранится в виде типа Java Date.
У меня также есть дата создания григорианского календаря. Дата gregorian calendar не имеет параметров и, следовательно, является экземпляром сегодняшней даты (и времени?).
С датой java, я хочу, чтобы получить год, месяц, день, час, минуту и секунды из типа даты java и сравнить дату gregoriancalendar.
Я видел, что на данный момент дата Java хранится как длинная, и доступные только доступные методы просто записывают long как форматированную строку даты. Есть ли способ доступа к Год, месяц, день и т.д.
Я видел, что методы getYear()
, getMonth()
и т.д. для класса Date
устарели. Мне было интересно, что лучше всего использовать экземпляр Java Date, который у меня есть с датой GregorianCalendar
.
Моя конечная цель - сделать расчет даты, чтобы я мог проверить, что дата Java находится в пределах стольких часов, минут и т.д. сегодняшней даты и времени.
Я все еще новичок в Java, и я немного озадачен этим.
Ответы
Ответ 1
Используйте что-то вроде:
Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
// etc.
Осторожно, месяцы начинаются с 0, а не с 1.
Изменить: Начиная с Java 8 лучше использовать java.time.LocalDate, а не java.util.Calendar. Посмотрите этот ответ, чтобы узнать, как это сделать.
Ответ 2
С помощью Java 8 и более поздних версий вы можете преобразовать объект Date в LocalDate объект, а затем легко получить год, месяц и день.
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int day = localDate.getDayOfMonth();
Обратите внимание, что getMonthValue()
возвращает значение int от 1 до 12.
Ответ 3
Вы можете сделать что-то вроде этого, это объяснит, как работает класс Date
.
String currentDateString = "02/27/2012 17:00:00";
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = sd.parse(currentDateString);
String yourDateString = "02/28/2012 15:00:00";
SimpleDateFormat yourDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date yourDate = yourDateFormat.parse(yourDateString);
if (yourDate.after(currentDate)) {
System.out.println("After");
} else if(yourDate.equals(currentDate)) {
System.out.println("Same");
} else {
System.out.println("Before");
}
Ответ 4
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());
simpleDateFormat = new SimpleDateFormat("MMMM");
System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase());
simpleDateFormat = new SimpleDateFormat("YYYY");
System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase());
EDIT: Выход на date
= Fri Jun 15 09:20:21 CEST 2018
:
DAY FRIDAY
MONTH JUNE
YEAR 2018
Ответ 5
private boolean isSameDay(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
return (sameDay && sameMonth && sameYear);
}
Ответ 6
Это может быть проще
Date date1 = new Date("31-May-2017");
OR
java.sql.Date date1 = new java.sql.Date((new Date()).getTime());
SimpleDateFormat formatNowDay = new SimpleDateFormat("dd");
SimpleDateFormat formatNowMonth = new SimpleDateFormat("MM");
SimpleDateFormat formatNowYear = new SimpleDateFormat("YYYY");
String currentDay = formatNowDay.format(date1);
String currentMonth = formatNowMonth.format(date1);
String currentYear = formatNowYear.format(date1);
Ответ 7
@Test
public void testDate() throws ParseException {
long start = System.currentTimeMillis();
long round = 100000l;
for (int i = 0; i < round; i++) {
StringUtil.getYearMonthDay(new Date());
}
long mid = System.currentTimeMillis();
for (int i = 0; i < round; i++) {
StringUtil.getYearMonthDay2(new Date());
}
long end = System.currentTimeMillis();
System.out.println(mid - start);
System.out.println(end - mid);
}
public static Date getYearMonthDay(Date date) throws ParseException {
SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd");
String dateStr = f.format(date);
return f.parse(dateStr);
}
public static Date getYearMonthDay2(Date date) throws ParseException {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.HOUR_OF_DAY, 0);
return c.getTime();
}
public static int compare(Date today, Date future, Date past) {
Date today1 = StringUtil.getYearMonthDay2(today);
Date future1 = StringUtil.getYearMonthDay2(future);
Date past1 = StringUtil.getYearMonthDay2(past);
return today.compare // or today.after or today.before
}
getYearMonthDay2 (решение для календаря) в десять раз быстрее. Теперь у вас есть yyyy MM dd 00 00 00, а затем сравните с помощью date.compare
Ответ 8
Date queueDate = new SimpleDateFormat("yyyy-MM-dd").parse(inputDtStr);
Calendar queueDateCal = Calendar.getInstance();
queueDateCal.setTime(queueDate);
if(queueDateCal.get(Calendar.DAY_OF_YEAR)==Calendar.getInstance().get(Calendar.DAY_OF_YEAR))
{
"same day of the year!";
}
Ответ 9
Будьте осторожны, начните с 0, а не с 1. Кроме того, используйте календарь как pm, как am, поэтому будьте внимательны при использовании часов и минут.
Date your_date;
Calendar cal = Calendar.getInstance();
cal.setTime(your_date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MINUTE);