首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用LocalTime将字符串转换为Joda LocalTime

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

Stack Overflow用户
提问于 2016-01-06 13:13:37
回答 2查看 443关注 0票数 0

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

如果我以"12:00“的形式传递时间,它表示时间太短,但如果我将时间传递为”12:00“,则表示时间格式错误。

代码语言:javascript
复制
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());
      }


   }
}

如何正确使用或修复?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-06 14:34:03

DefaultFormattingConversionService的普通设置使用平台默认区域设置,我从错误中假设,这些设置与我的相同,即。英语。这意味着,在一段时间内,您需要添加AM/PM指示器。这对我来说很管用:

代码语言:javascript
复制
System.out.println(service.convert("10:12 am", LocalTime.class));

>> 10:12:00.000

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

代码语言:javascript
复制
service.addConverter(new Converter<String, LocalTime>() {
    @Override
    public LocalTime convert(String source) {
        return LocalTime.parse(source);
    }
});

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

代码语言:javascript
复制
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

您可以跳过注册默认转换器,方法是使用

代码语言:javascript
复制
new DefaultFormattingConversionService(false);

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

代码语言:javascript
复制
@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;
}
票数 2
EN

Stack Overflow用户

发布于 2016-01-06 13:16:48

试试这个:

代码语言:javascript
复制
DateTimeFormatter dtf = DateTimeFormat.forPattern("HH:mm:ss");
LocalTime localTime = dtf.parseLocalTime("12:00:00");
System.out.println("Time"+localTime);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34634065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档