tl;dr
LocalDate.of( 2008 , Month.JANUARY , 23 )
Legacy classes
As others have said correctly, you assumed month numbers were 1-based counting. But in fact they are 0-based counting. One of the many problems with the java.util.Date/Calendar classes.
As a workaround, use the pre-defined constants rather than try to remember that ridiculous numbering scheme:
java.time
Better yet, get a real date-time framework: Use the JSR 310: Date and Time API classes built into Java 8+.
To represent a date-only value, use LocalDate class. In contrast to the legacy classes, java.time uses sane numbering. For months that is 1-12 for January-December.
LocalDate ld = LocalDate.of( 2008 , 1 , 23 ) ; // 1 = January.
Or use the nice Month enum.
LocalDate ld = LocalDate.of( 2008 , Month.JANUARY , 23 ) ;