2016-01-06 172 views
0

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

如果我将时间作为“12:00”来表示时间太短,但如果我将它作为“12:00:00”传递,则表示它的格式不正确。

import org.joda.time.LocalTime; 
import org.springframework.format.support.DefaultFormattingConversionService; 

public class SpringLocalTimeFormatterTry { 

    public static void main(String[] args) { 

     DefaultFormattingConversionService service = new DefaultFormattingConversionService(); 
     try { 
     System.out.println(service.convert("12:00", LocalTime.class)); 
     } 
     catch (Exception e) { 
     System.out.println(e.getMessage()); 
     } 
     try { 
     System.out.println(service.convert("12:00:00", LocalTime.class)); 
     } 
     catch (Exception e) { 
     System.out.println(e.getMessage()); 
     } 


    } 
} 

如何正确使用它或修复?

+0

如果你提供一些你的代码会更容易,看看有什么问题是。你使用'LocalTime'的构造函数还是使用某种解析器?很难说。 – mohammedkhan

+0

你为什么使用'DefaultFormattingConversionService'? 'LocalTime.parse(“12:00”);'不够? – mohammedkhan

+0

@mohammedkhan上面的代码是SSCCE。我使用'DefaultFormattingConversionService',因为它是先决条件。 –

回答

2

DefaultFormattingConversionService使用平台默认的语言环境,对此,我从错误承担香草的设置,都和我一样,即。英语。这意味着,你需要添加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); 

最后,我想你实际上是从ConversionServiceFactoryBean得到ConversionService的生产代码,所以你可以配置如下:

@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; 
} 
0

试试这个:

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

在这种情况下,她试图解析时间而不是日期,所以'DateTime'不适合在这里使用。 – mohammedkhan