如何获得一年的开始和结束日期?

Pez*_*kow 24 java date

我必须使用Java Date类来解决这个问题(它与我无法控制的东西接口).

如何获取一年的开始和结束日期,然后遍历每个日期?

Prz*_*mek 59

java.time

使用java.timeJava 8及更高版本中内置的库.特别是LocalDateTemporalAdjusters班级.

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
Run Code Online (Sandbox Code Playgroud)

如果您需要添加时间信息,可以使用任何可用LocalDateLocalDateTime转换方式

lastDay.atStartOfDay(); // 2015-12-31T00:00
Run Code Online (Sandbox Code Playgroud)


ale*_*oot 39

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 ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这个代码可以用常量来改进,例如`cal.set(Calendar.MONTH,Calendar.DECEMBER);` (8认同)
  • 你不要在他们之间转换; Date代表一个时刻,而Calendar则告诉您如何在特定系统中表示该瞬间. (2认同)

Vir*_*oll 5

    // 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();
Run Code Online (Sandbox Code Playgroud)

要迭代,您应该使用日历对象并增加 day_of_month 变量

希望它可以帮助


sri*_*lla 5

 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());
Run Code Online (Sandbox Code Playgroud)

  • 这会在非years年有效吗?还是应该手动更正? (2认同)
  • 请记住,有些年份有 365 天,有些年份则有 366 天。我不应该使用这种方法。 (2认同)

小智 5

如果您正在寻找单行表达式,我通常使用这个:

new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(new java.util.Date().getYear())+"-01-01")
Run Code Online (Sandbox Code Playgroud)


Unn*_*ris 5

比斯里尼的答案有所改进。
使用 确定一年中的最后一个日期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();
Run Code Online (Sandbox Code Playgroud)