You are currently using the SimpleDateFormat(String) constructor. This implies the default locale and as the Locale documentation tells you, be wary of the default locale as unexpected output can be produced on various systems.
You should instead use the SimpleDateFormat(String, Locale) constructor. It is going to take in an additional parameter - the locale you want to use.
If you want to make sure the output is machine-readable in a consistent way (always looks the same, regardless of the actual locale of the user), you can pick Locale.US. If you do not care about machine redability, you can explicitly set it to use Locale.getDefault().
Using those on your example code would look something like this:
// for US
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", Locale.US);
// or for default
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy",
Locale.getDefault());
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…