First day of year

In the standard ISO8601 week algorithm, the first week of the year is that in which at least 4 days are in the year. As a result of this definition, day 1 of the first week may be in the previous year. The weekyear allows you to query the effective year for that day. This example uses joda time and java 8 date time API to demonstrate how to get the first day in current year and the first day of the prior year.

Java 8 Date and Time API

@Test
public void first_day_in_year_current_year_java8 () {
    
    LocalDate date = LocalDate.of(2014, Month.FEBRUARY, 01);

    LocalDate firstDayOfYear = date.with(TemporalAdjusters.firstDayOfYear());
    
    assertEquals(1, firstDayOfYear.getDayOfMonth());
}

Joda Time

First day in current year

@Test
public void first_day_in_year_current_year () {
    
    DateTime dateTime = new DateTime(2012, 1, 1, 0, 0, 0, 0);

    DateTime firstDayOfTheFirstWeek = dateTime
                .withWeekyear(dateTime.getYear()).withWeekOfWeekyear(1)
                .withDayOfWeek(1);

    logger.info(firstDayOfTheFirstWeek);
    
    assertEquals(2012, firstDayOfTheFirstWeek.getYear());
    assertEquals(1, firstDayOfTheFirstWeek.getMonthOfYear());
    assertEquals(2, firstDayOfTheFirstWeek.getDayOfMonth());
}

Output

2012-01-02T00:00:00.000-06:00

First day in prior year

@Test
public void first_day_in_year_prior_year () {
    
    DateTime dateTime = new DateTime(2013, 1, 1, 0, 0, 0, 0);

    DateTime firstDayOfTheFirstWeek = dateTime
                .withWeekyear(dateTime.getYear()).withWeekOfWeekyear(1)
                .withDayOfWeek(1);
            
    logger.info(firstDayOfTheFirstWeek);
    
    assertEquals(2012, firstDayOfTheFirstWeek.getYear());
    assertEquals(12, firstDayOfTheFirstWeek.getMonthOfYear());
    assertEquals(31, firstDayOfTheFirstWeek.getDayOfMonth());
}

Output

2012-12-31T00:00:00.000-06:00