Как получить дату начала и окончания года?
Мне нужно использовать класс Java Date
для этой проблемы (он взаимодействует с чем-то из моего контроля).
Как мне получить дату начала и окончания года, а затем повторить каждую дату?
Ответы
Ответ 1
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.DAY_OF_YEAR, 1);
Date start = cal.getTime();
//set date to last day of 2014
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, 11); // 11 = december
cal.set(Calendar.DAY_OF_MONTH, 31); // new years eve
Date end = cal.getTime();
//Iterate through the two dates
GregorianCalendar gcal = new GregorianCalendar();
gcal.setTime(start);
while (gcal.getTime().before(end)) {
gcal.add(Calendar.DAY_OF_YEAR, 1);
//Do Something ...
}
Ответ 2
java.time
Использование библиотеки java.time
, встроенной в Java 8 и более поздних версий. В частности, LocalDate
и TemporalAdjusters
классы.
import java.time.LocalDate
import static java.time.temporal.TemporalAdjusters.firstDayOfYear
import static java.time.temporal.TemporalAdjusters.lastDayOfYear
LocalDate now = LocalDate.now(); // 2015-11-23
LocalDate firstDay = now.with(firstDayOfYear()); // 2015-01-01
LocalDate lastDay = now.with(lastDayOfYear()); // 2015-12-31
Если вам нужно добавить информацию о времени, вы можете использовать любое доступное преобразование LocalDate
to LocalDateTime
, например
lastDay.atStartOfDay(); // 2015-12-31T00:00
Ответ 3
Calendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_YEAR, 1);
System.out.println(cal.getTime().toString());
cal.set(Calendar.DAY_OF_YEAR, 366); // for leap years
System.out.println(cal.getTime().toString());
Ответ 4
// suppose that I have the following variable as input
int year=2011;
Calendar calendarStart=Calendar.getInstance();
calendarStart.set(Calendar.YEAR,year);
calendarStart.set(Calendar.MONTH,0);
calendarStart.set(Calendar.DAY_OF_MONTH,1);
// returning the first date
Date startDate=calendarStart.getTime();
Calendar calendarEnd=Calendar.getInstance();
calendarEnd.set(Calendar.YEAR,year);
calendarEnd.set(Calendar.MONTH,11);
calendarEnd.set(Calendar.DAY_OF_MONTH,31);
// returning the last date
Date endDate=calendarEnd.getTime();
Чтобы выполнить итерацию, вы должны использовать объект календаря и увеличить значение переменной day_of_month
Надеюсь, что это поможет
Ответ 5
Я предполагаю, что у вас есть экземпляр класса Date, и вам нужно найти первую дату и последнюю дату текущего года в терминах экземпляра класса Date. Для этого вы можете использовать класс Calendar. Создайте экземпляр календаря, используя предоставленный экземпляр класса даты. Установите для месяца MONTH и DAY_OF_MONTH значение 0 и 1 соответственно, затем используйте метод getTime(), который вернет экземпляр класса Date, представляющий первый день года. Вы можете использовать ту же технику, чтобы найти конец года.
Date date = new Date();
System.out.println("date: "+date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println("cal:"+cal.getTime());
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
System.out.println("cal new: "+cal.getTime());
Ответ 6
Если вы ищете однострочное выражение, я обычно использую это:
new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(new java.util.Date().getYear())+"-01-01")
Ответ 7
Вы можете использовать Jodatime, как показано в этом потоке Java Joda Time - реализовать итератор диапазона дат
Кроме того, вы можете использовать gregorian calendar и перемещаться один день за раз, как показано здесь. Мне нужен цикл, который повторяется через интервал дат
PS. Совет: сначала найдите его.
Ответ 8
Серьезно, просто GOOGLING "java first day of year" получил мне эту ссылку, отличный пример использования конструкции Calendar.
Не знаете, почему вы хотите использовать Date, если вы не ограничены, и это что-то вроде домашнего задания.
Ответ 9
Вы можете использовать проект apache commons-lang, который имеет класс DateUtils.
Они предоставляют итератор, который вы можете предоставить объекту Date.
Но я настоятельно рекомендую использовать класс Calendar, как предложено другими ответами.
Ответ 10
Обновление: Библиотека Joda-Time теперь находится в режиме обслуживания, а ее команда советует перейти на классы java.time. См. Правильный ответ java.time от Przemek.
Часовой пояс
В других ответах игнорируется ключевая проблема часового пояса.
Joda времени
Избегайте выполнения работы с датой с известным хаотичным классом java.util.Date. Вместо этого используйте либо Joda-Time, либо java.time. Преобразуйте в j.u.Date объекты по мере необходимости для взаимодействия.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ) ;
int year = 2015 ;
DateTime firstOfYear = new DateTime( year , DateTimeConstants.JANUARY , 1 , 0 , 0 , zone ) ;
DateTime firstOfNextYear = firstOfYear.plusYears( 1 ) ;
DateTime firstMomentOfLastDayOfYear = firstOfNextYear.minusDays( 1 ) ;
Преобразовать в java.util.Date
Преобразуйте в j.u.Date по мере необходимости.
java.util.Date d = firstOfYear.toDate() ;
Ответ 11
Улучшение ответа Шрини.
Определите последнюю дату года, используя Calendar.getActualMaximum
.
Calendar cal = Calendar.getInstance();
calDate.set(Calendar.DAY_OF_YEAR, 1);
Date yearStartDate = calDate.getTime();
calDate.set(Calendar.DAY_OF_YEAR, calDate.getActualMaximum(Calendar.DAY_OF_YEAR));
Date yearEndDate = calDate.getTime();
Ответ 12
Calendar cal = Calendar.getInstance();//getting the instance of the Calendar using the factory method
we have a get() method to get the specified field of the calendar i.e year
int year=cal.get(Calendar.YEAR);//for example we get 2013 here
cal.set(year, 0, 1); setting the date using the set method that all parameters like year ,month and day
Here we have given the month as 0 i.e Jan as the month start 0 - 11 and day as 1 as the days starts from 1 to30.
Date firstdate=cal.getTime();//here we will get the first day of the year
cal.set(year,11,31);//same way as the above we set the end date of the year
Date lastdate=cal.getTime();//here we will get the first day of the year
System.out.print("the firstdate and lastdatehere\n");
Ответ 13
GregorianCalendar gcal = new GregorianCalendar();
gcal.setTime(start);
while (gcal.getTime().before(end)) {
gcal.add(Calendar.DAY_OF_YEAR, 1);
//Do Something ...
}
Создание GregorianCalendar здесь бессмысленно. Фактически, переход через исходный код Calendar.java показывает, что Calendar.getInstance() уже предоставляет экземпляр GregorianCalendar.
С уважением,
Николя