如何在JSefa中更改日期转换器的区域设置?我的语言环境是pt_BR,我要转换的日期是en_US。我正在使用CSV文件。
这是我的领域:
@CsvField(pos = 7, format = "dd MMM yyyy hh:mm:ss a")
private Date createdDate;
尝试转换时
03 Jun 2014 01:00:50 AM
一切正常,因为 Junho (pt_BR)和六月(en_US)以相同的三个字母开头。 但是,当它尝试从
转换时31 May 2014 01:05:35 AM
引发异常。
GRAVE: Servlet.service() for servlet [socReporterServlet] in context with path [] threw exception [Request processing failed; nested exception is org.jsefa.DeserializationException: Error while deserializing
Position: [22,122]
Object Path: Incident[createdDate]] with root cause
org.jsefa.common.converter.ConversionException: Wrong date format: 31 May 2014 01:05:35 AM
我认为这是因为本月巴西的这个词是Maio,而不是上面的三个字母。
我该如何解决?
由于
答案 0 :(得分:0)
在问我发现这个问题之后:https://github.com/oasits/JSefa/blob/master/src/main/java/org/jsefa/common/converter/DateConverter.java。
这是我的代码。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.jsefa.common.converter.ConversionException;
import org.jsefa.common.converter.SimpleTypeConverter;
import org.jsefa.common.converter.SimpleTypeConverterConfiguration;
public class DateConverter implements SimpleTypeConverter {
private static final String DEFAULT_FORMAT = "dd MMM yyyy hh:mm:ss a";
private final SimpleDateFormat dateFormat;
public static DateConverter create(SimpleTypeConverterConfiguration configuration) {
return new DateConverter(configuration);
}
protected DateConverter(SimpleTypeConverterConfiguration configuration) {
String format = getFormat(configuration);
try {
this.dateFormat = new SimpleDateFormat(format, Locale.US);
this.dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
} catch (Exception e) {
throw new ConversionException("Could not create a " + this.getClass().getName() + " with format "
+ format, e);
}
}
@Override
public Object fromString(String str) {
try {
return (Date) dateFormat.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
@Override
public String toString(Object obj) {
return dateFormat.format((Date) obj);
}
protected String getDefaultFormat() {
return DateConverter.DEFAULT_FORMAT;
}
private String getFormat(SimpleTypeConverterConfiguration configuration) {
if (configuration.getFormat() == null) {
return getDefaultFormat();
}
if (configuration.getFormat().length != 1) {
throw new ConversionException("The format for a DateConverter must be a single String");
}
return configuration.getFormat()[0];
}
}