如果我在平面文件中的一行中有2种日期格式,我该如何使用org.springframework.beans.propertyeditors.CustomDateEditor。
<bean id="dateEditor1" class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="MMddyyyy" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<bean id="dateEditor2" class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="MMddyyyyHHmm" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<property name="customEditors">
<map>
<entry key="java.util.Date" value-ref="dateEditor1"/>
<entry key="java.util.Date" value-ref="dateEditor1"/>
</map>
</property>
我正在尝试上面的代码。但它不起作用。我正在使用PatternMatchingCompositeLineMapper。
答案 0 :(得分:1)
使用以下自定义日期格式:
public class CustomDateFormats extends DateFormat {
private static final long serialVersionUID = 1L;
private static final String[] formats = new String[] { "MMddyyyy", "MMddyyyyHHmm", "MMdd" };
Date result = null;
@Override
public StringBuffer format(final Date date, final StringBuffer toAppendTo, final FieldPosition fieldPosition) {
throw new UnsupportedOperationException("This custom date formatter can only be used to *parse* Dates.");
}
@Override
public Date parse(final String source, final ParsePosition pos) {
Date res = null;
for (String format : formats) {
if (source != null && format.length() == source.length()) {
SimpleDateFormat sdFormat = new SimpleDateFormat(format);
res = sdFormat.parse(source, pos);
break;
}
}
return res;
}
}
<bean id="dateEditor1" class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="com.disney.wdpro.service.transaction.processing.batch.domain.logicalBatchOpen.CustomDateFormats" />
</constructor-arg>
<constructor-arg value="true" />
</bean>
答案 1 :(得分:0)
你不能这样做。查看使用java.util.Date作为键的地图,然后您希望它保存2个值。 map不会以这种方式工作,如果密钥已经存在,它将始终覆盖该值。因此,在您的情况下,您必须编写一个自定义bean来在平面文件中设置这些字段。
根据Spring doc,每个属性路径只支持一个注册的自定义编辑器。
但是你可以编写一个自定义的dateformat类,它将包含不同日期格式的列表,并使用此类自动装配到自定义编辑器。 例如,如下所示,或者您创建自定义编辑器并包装CustomDateEditor列表,有多种用途,您可以参考下面的一个示例。
<bean id="customer4" class="org.testSpring.util.DateBeanTest4">
<property name="birthDate">
<bean factory-bean="customDateFormat" factory-method="parse">
<constructor-arg value="31-01-2010" />
<!-- mm/dd/yyyy, dd-MM-yyyy, yyyyMMdd -->
</bean>
</property>
</bean>
<bean id="customDateFormat" class="org.testSpring.util.CustomDateFormats">
</bean>
您的格式化程序类
public class CustomDateFormats extends DateFormat {
private static final List<? extends DateFormat> DATE_FORMATS = Arrays.asList(
// or inject thorough construction with a list of formats
new SimpleDateFormat("dd-MM-yyyy"),
new SimpleDateFormat("mm/dd/yyyy"),
new SimpleDateFormat("yyyyMMdd"));
@Override
public StringBuffer format(final Date date, final StringBuffer toAppendTo, final FieldPosition fieldPosition)
{
throw new UnsupportedOperationException("This custom date formatter can only be used to *parse* Dates.");
}
@Override
public Date parse(final String source, final ParsePosition pos) {
Date res = null;
for (final DateFormat dateFormat : DATE_FORMATS) {
if ((res = dateFormat.parse(source, pos)) != null) {
return res;
}
}
return null;
}
}