如何在JSefa中更改日期区域设置

时间:2014-06-10 14:11:23

标签: java csv locale

如何在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,而不是上面的三个字母。

我该如何解决?

由于

1 个答案:

答案 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];
    }
}