2016-01-06 173 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