I needed to convert date to String removing year. String should keep locale settings. Date format is of type DateFormat.LONG
, not DateFormat.SHORT
. E.g., full string is September 18, 2012
, not 09/18/12
.
My solution (based on Alex post):
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Pattern;
public class Test {
private static void testLocaleDates() {
String fmtString = "%-20s %-25s %-25s %-20s %-20s";
System.out.println(String.format(fmtString, "Locale", "Complete date", "Pattern", "Yearless date", "Yearless pattern"));
Pattern regExpPattern = Pattern.compile("Sweden|Spain|Russia|Ukraine|States|France|German|Japan|China", Pattern.CASE_INSENSITIVE);
for (Locale locale : Locale.getAvailableLocales()) {
boolean isPrint = regExpPattern.matcher(locale.getDisplayCountry()).find();
if (!isPrint)
continue;
Date date = new Date();
String dateTxt = DateFormat.getDateInstance(DateFormat.LONG, locale).format(date);
SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance(DateFormat.LONG, locale);
String pattern = sdf.toPattern();
// Checking 'de' we omit problems with Spain locale
String regExpPatternTxt = pattern.contains("de") ? "[^Mm]*[Yy]+[^Mm]*" : "[^DdMm]*[Yy]+[^DdMm]*";
String yearlessPattern = pattern.replaceAll(regExpPatternTxt, "");
SimpleDateFormat yearlessSDF = new SimpleDateFormat(yearlessPattern, locale);
System.out.println(String.format(fmtString, locale.getDisplayCountry(), dateTxt, pattern, yearlessSDF.format(date), yearlessPattern));
}
}
public static void main(String[] args) {
testLocaleDates();
}
}
Program output:
Locale Complete date Pattern Yearless date Yearless pattern
Japan 2012/09/18 yyyy/MM/dd 09/18 MM/dd
Japan H24.09.18 Gy.MM.dd 09.18 MM.dd
United States September 18, 2012 MMMM d, yyyy September 18 MMMM d
Spain 18 de septiembre de 2012d' de 'MMMM' de 'yyyy 18 de septiembre d' de 'MMMM
United States 18 de septiembre de 2012d' de 'MMMM' de 'yyyy 18 de septiembre d' de 'MMMM
Ukraine 18 вересня 2012 d MMMM yyyy 18 вересня d MMMM
Spain 18 / setembre / 2012 d' / 'MMMM' / 'yyyy 18 / setembre d' / 'MMMM
Russia 18 Сентябрь 2012 г. d MMMM yyyy 'г.' 18 Сентябрь d MMMM
China 2012年9月18日 yyyy'年'M'月'd'日' 9月18日 M'月'd'日'
France 18 septembre 2012 d MMMM yyyy 18 septembre d MMMM
Germany 18. September 2012 d. MMMM yyyy 18. September d. MMMM
Sweden den 18 september 2012 'den 'd MMMM yyyy den 18 september 'den 'd MMMM