package springmvc.context;
import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.springframework.util.StringUtils;
/**
*
* @author Kent Yeh
*/
public class DatePropertyEditor extends PropertyEditorSupport {
private static Logger logger = LogManager.getLogger(DatePropertyEditor.class);
private static Map<String, String> patterns = new HashMap<String, String>();
static {
DatePropertyEditor.patterns.put("yyyyMMdd", "^\\d{8}$");
DatePropertyEditor.patterns.put("yyyyMMddHHmmss", "^\\d{14}$");
DatePropertyEditor.patterns.put("yyyy/M/d", "^\\d{4}/\\d{1,2}/\\d{1,2}$");
DatePropertyEditor.patterns.put("yyyy/M/d H:m", "^\\d{4}/\\d{1,2}/\\d{1,2} \\d{1,2}:\\d{1,2}$");
DatePropertyEditor.patterns.put("yyyy/M/d H:m:s", "^\\d{4}/\\d{1,2}/\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$");
DatePropertyEditor.patterns.put("yyyy-M-d", "^\\d{4}-\\d{1,2}-\\d{1,2}$");
DatePropertyEditor.patterns.put("yyyy-M-d H:m", "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}$");
DatePropertyEditor.patterns.put("yyyy-M-d H:m:s", "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$");
}
@Override
public String getAsText() {
return getValue()==null?"":String.format("%1$tY/%1$tm/%1$td", getValue());
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
if (!StringUtils.hasText(text)) {
setValue(null);
} else if (text instanceof String) {
Object dateObj = null;
SimpleDateFormat df = new SimpleDateFormat();
for (String key : DatePropertyEditor.patterns.keySet()) {
if (text.matches(DatePropertyEditor.patterns.get(key))) {
df.applyPattern(key);
try {
dateObj = df.parse(text);
} catch (Exception e) {
logger.error(String.format("轉換日期%s[%s]失敗", text, key), e.getMessage(), e);
}
break;
}
}
setValue(dateObj);
} else {
setValue(null);
}
}
}