package com.alexvasilkov.android.commons.dates; import java.text.FieldPosition; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AdvancedDateFormatter extends SimpleDateFormat { private static final long serialVersionUID = 7394095110062211869L; private static final Pattern PATTERN = Pattern.compile("\\{(\\w+):(.+)\\}"); public AdvancedDateFormatter(String pattern) { super(pattern); } public AdvancedDateFormatter(String template, Locale locale) { super(template, locale); } @Override public StringBuffer format(Date date, StringBuffer buffer, FieldPosition fieldPos) { StringBuffer formatted = super.format(date, buffer, fieldPos); StringBuffer result = new StringBuffer(formatted.length()); Matcher m = PATTERN.matcher(formatted); String command, value; while (m.find()) { command = m.group(1); value = m.group(2); if ("lower".equals(command)) { m.appendReplacement(result, value.toLowerCase()); } else if ("upper".equals(command)) { m.appendReplacement(result, value.toUpperCase()); } } m.appendTail(result); return result; } }