无法使用DefaultFormattingConversionService从字符串转换为Joda LocalTime

时间:2016-01-06 13:13:37

标签: java spring jodatime data-conversion

无法使用DefaultFormattingConversionService将字符串转换为Joda LocalTime。

如果我将时间设为“12:00”则表示时间太短,但如果我将其作为“12:00:00”传递,则表示时间不正确。

reg query

如何正确使用或修复?

2 个答案:

答案 0 :(得分:2)

DefaultFormattingConversionService的vanilla设置使用平台默认语言环境,我从错误中假设它与我的相同,即。英语。这意味着,您需要添加AM / PM指标。这对我有用:

System.out.println(service.convert("10:12 am", LocalTime.class));

>> 10:12:00.000

要处理所需的时间格式,您可以添加额外的转换器:

service.addConverter(new Converter<String, LocalTime>() {
    @Override
    public LocalTime convert(String source) {
        return LocalTime.parse(source);
    }
});

然后,两个例子都通过了:

System.out.println(service.convert("12:00", LocalTime.class));
>> 12:00:00.000
System.out.println(service.convert("12:00:00", LocalTime.class));
>> 12:00:00.000

您可以通过使用

创建服务来跳过注册默认转换器
new DefaultFormattingConversionService(false);

最后,我假设您在生产代码中实际上从ConversionService获取ConversionServiceFactoryBean,因此您可以按如下方式配置:

@Bean
public ConversionServiceFactoryBean conversionService() {
    ConversionServiceFactoryBean conversionServiceFactoryBean = new ConversionServiceFactoryBean();
    Set<Converter<?, ?>> myConverters = new HashSet<>();
    myConverters.add(new Converter<String, LocalTime>() {
        @Override
        public LocalTime convert(String source) {
            return LocalTime.parse(source);
        }
    });
    conversionServiceFactoryBean.setConverters(myConverters);
    return conversionServiceFactoryBean;
}

答案 1 :(得分:0)

试试这个:

DateTimeFormatter dtf = DateTimeFormat.forPattern("HH:mm:ss");
LocalTime localTime = dtf.parseLocalTime("12:00:00");
System.out.println("Time"+localTime);