Java BeanUtilsBean:将日期转换为字符串

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5757242/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 12:37:19  来源:igfitidea点击:

Java BeanUtilsBean : Convert Date to String

javaapache-commons

提问by d4v1dv00

I am trying to run BeanUtilsBean.getInstance().populate(...)but on the HTML form, there is a field that carries String representation of Date of Birth. The object bean has the field type of java.util.Date

我正在尝试运行,BeanUtilsBean.getInstance().populate(...)但在 HTML 表单上,有一个字段携带出生日期的字符串表示形式。对象 bean 的字段类型为java.util.Date

Read some search from Ggl that have to build custom converters but not quite understand how to do that.

从 Ggl 中阅读一些必须构建自定义转换器的搜索,但不太了解如何做到这一点。

Anyone can help?

任何人都可以帮忙吗?

My code:

我的代码:

public static void main(String[] args) {
    Map<String, String[]> formData = new HashMap<String, String[]>();
    formData.put("email", new String[]{"[email protected]"});
    formData.put("firstName", new String[]{"danny"});
    formData.put("lastName", new String[]{"miller"});
    formData.put("dob", new String[]{"15-Apr-1980"});
    formData.put("userName", new String[]{"dannymiller"});
    try {
        Consumer consumer = new Consumer();
        DateTimeConverter dtConverter = new DateConverter();
        dtConverter.setPattern("dd/MMM/yyyy");

        ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
        convertUtilsBean.deregister(Date.class);
        convertUtilsBean.register(dtConverter, Date.class);

        BeanUtilsBean beanUtilsBean = new BeanUtilsBean(convertUtilsBean, new PropertyUtilsBean());

        beanUtilsBean.populate(consumer, formData);


        if (consumer != null) {
            System.out.println(consumer.getEmail());
            System.out.println(consumer.getFirstName());
            System.out.println(consumer.getLastName());
            System.out.println(consumer.getDob());
            System.out.println(consumer.getUserName());
        }
    } catch  (Exception e) {
        e.printStackTrace();
    }

The return error:

返回错误:

Apr 22, 2011 11:14:45 PM org.apache.commons.beanutils.converters.DateTimeConverter toDate WARNING: DateConverter does not support default String to 'Date' conversion. Apr 22, 2011 11:14:45 PM org.apache.commons.beanutils.converters.DateTimeConverter toDate WARNING: (N.B. Re-configure Converter or use alternative implementation) Exception in thread "main" org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion. at org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:468) at org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:343) at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:156) at org.apache.commons.beanutils.converters.ConverterFacade.convert(ConverterFacade.java:60) at org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:470) at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1008) at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830) at com.ymatch.test.BeanTest.main(BeanTest.java:32)

2011 年 4 月 22 日下午 11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDate 警告:DateConverter 不支持默认字符串到“日期”的转换。2011 年 4 月 22 日下午 11:14:45 org.apache.commons.beanutils.converters.DateTimeConverter toDate 警告:(注意重新配置转换器或使用替代实现)线程“main”org.apache.commons.beanutils.ConversionException 中的异常: DateConverter 不支持默认字符串到“日期”的转换。在 org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:468) 在 org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:343) 在 org.apache.commons.beanutils .converters.AbstractConverter.convert(AbstractConverter.java:156) 在 org。

采纳答案by d4v1dv00

Done using this method:

使用此方法完成:

public Object populate(Object obj, HashMap<String, String[]> formData)
            throws IllegalAccessException, InvocationTargetException {
        ConvertUtils
                .register(new StringToDateConverter(), java.util.Date.class);
        BeanUtilsBean.getInstance().populate(obj, formData);
        return obj;
    }

回答by Bozho

You need a SimpleDateFormatby which to parse the given string according to a specified format. For that you'd need to handle the conversion manually - name the request parameter differently and then set it manually.

您需要SimpleDateFormat根据指定的格式解析给定的字符串。为此,您需要手动处理转换 - 以不同的方式命名请求参数,然后手动设置。

But beanutils has a conversion utility, so you can use it instead (this code can be executed once per application):

但是 beanutils 有一个转换实用程序,因此您可以改用它(此代码可以为每个应用程序执行一次):

DateTimeConverter dtConverter = new DateConverter();
dtConverter.setPattern("<your custom date pattern here>");
ConvertUtils.register(dtConverter, Date.class);