Мне нужно было преобразовать дату в год удаления строки. Строка должна сохранять настройки локали. Формат даты имеет тип DateFormat.LONG
, а не DateFormat.SHORT
. Например, полная строка September 18, 2012
, а не 09/18/12
.
Мое решение (на основе 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();
}
}
Вывод программы:
Язык Полная дата Шаблон Годовая дата Годовой образец
Япония 2012/09/18 гггг / мм / дд 09/18 мм / дд
Япония H24.09.18 Гр.мм.дд 09.18 MM.dd
США 18 сентября 2012 г. ММММ д, гггг 18 сентября ММММ д
Испания 18 сентября 2012 года д 'де' ММММ 'года' * гг 18 сентября д 'де' ММММ
США 18 сентября 2012 г. d 'de' MMMM 'de' гггг 18 сентября d 'de' ММММ
Украина 18 вересня 2012 д ММММ гггг 18 вересня д ММММ
Испания 18 / сентябрь / 2012 d '/' ММММ '/' гггг 18 / сентябрь д '/' ММММ
Россия 18 Сентябрь 2012 г. d ММММ гггг 'г.' 18 Сентябрь д ММММ
Китай 2012 年 9 月 18 日 гггг '年' M '月' d '日' 9 月 18 日 М '月' д '日'
Франция 18 сентября 2012 д ММММ гггг 18 сентября Д ММММ
Германия 18. Сентябрь 2012 д. ММММ гггг 18. Сентябрь д. ММММ
Швеция день 18 сентября 2012 года день ММММ гггг день 18 сентября день ММММ