无法使用DefaultFormattingConversionService
将字符串转换为Joda LocalTime。
如果我将时间设为“12:00”则表示时间太短,但如果我将其作为“12:00:00”传递,则表示时间不正确。
reg query
如何正确使用或修复?
答案 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);