The "stand-alone" month names ("LLLL" format) in English are expected to be identical to the "context sensitive" ("MMMM" format) month names, but instead we see only numbers.
This program:
import java.text.*;
import java.util.*;
public class September {
public static void main(String[] args) throws Throwable {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2010-09-15");
String[] formats = { "LLLL", "LLL", "LL",
"MMMM", "MMM", "MM",
};
for (String format : formats) {
System.out.println(format + " -> " + new SimpleDateFormat(format, new Locale("en")).format(date));
}
}
}
prints
LLLL -> 0009
LLL -> 009
LL -> 09
MMMM -> September
MMM -> Sep
MM -> 09
but we expect
LLLL -> September
LLL -> Sep
LL -> 09
MMMM -> September
MMM -> Sep
MM -> 09
The month names are handled correctly in e.g. Czech.
Spec says
http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
"""
Month: If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.
"""
Workaround is to check whether LLLL yields a number and fall back to MMMM in that case.
We have to have fall-back code anyways to continue working with jdk7.