Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Itemwriter中格式化输出日期?_Java_Spring_Date_Spring Batch - Fatal编程技术网

Java 如何在Itemwriter中格式化输出日期?

Java 如何在Itemwriter中格式化输出日期?,java,spring,date,spring-batch,Java,Spring,Date,Spring Batch,我有一个域类,如下所示 class SubScritpion{ private String subScripId; private String useId; private Date subScripDate; private Date billStartDate; private Date billEndDate; private int amount; //getters and Setters } 我从数据库中读取数据,数据类型为数据库中的时间戳,并将其转换为j

我有一个域类,如下所示

class SubScritpion{

 private String subScripId;
 private String useId;
 private  Date subScripDate;
 private Date billStartDate;
 private Date billEndDate;
 private  int amount;

 //getters and Setters
}
我从数据库中读取数据,数据类型为数据库中的时间戳,并将其转换为java.util.Date,然后使用
flatefileItemwriter
写入csv文件,我的ItemWriter如下所示

<bean id="kpCvsFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"
        scope="step">
        <!-- write to this csv file -->
        <property name="resource" value="file:/#{jobParameters['abs.file.path']}" />
        <property name="shouldDeleteIfExists" value="true" />

        <property name="lineAggregator">
            <bean
                class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="delimiter" value="," />

                <property name="fieldExtractor">
                    <bean
                        class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names"
                            value="subScripId,useId,subScripDate,billStartDate,billEndDate,amount" />
                    </bean>
                </property>
            </bean>
        </property>

        <property name="headerCallback" ref="kpFileHeader" />

    </bean>

现在的问题是日期格式我的数据库的日期格式为2014年11月17日04.25.06.806000000 AM,但csv文件包含的日期格式为2014年11月17日04:25:06 UTC周一

我没有找到任何可以插入ItemWriter的formmatter,尽管我找到了一些ItemReader的参考资料

一种方法是通过引入ItemProcesser来解决此问题,并使用SimpleDataFormatter将日期格式转换为字符串,然后使用写入域ojbect中的新字段,然后引用此新字段而不是itemWriter中的日期字段。
但我希望有一个更干净的解决方案,类似于
CustomEditor
,可以在SpringXML中应用值类型。有人能指出这方面的一些资源或方向吗

您正在寻找的“格式化程序”是
线性聚合器
。当前您正在使用
分隔线聚合器
,它在处理数据的分隔部分时,不处理格式。查看
FormatterLineAggregator
。通过指定字符串格式(使用
String.format()。从那里,您应该能够指定要呈现日期的格式。

这不能解决我的问题FormatterLineagCreator不能解决问题。我已经创建了如下格式化程序:%1$td-%1$Tb-%1$ty%1$tI.%1$tM.%1$tS.%1$tN%1$Tp,%2$d。但是,由于fieldextractor传递的是empty而不是null,因此%2$d失败。将数据提取到一行中有两个阶段。第一个是通过
字段提取器
从项目中提取字段。如果需要空字符串而不是空字符串,请创建自定义
FieldExtractor
实现。第二阶段是将这些字段格式化为所需的输出。您的问题是关于第二阶段,如果您提供第一阶段的正确数据,
FormatterLineAgggerator
可以在该阶段工作。非常感谢您的输入!1我在考虑定制FieldTractor。但是,由于您是SB的PL,我想问您一个问题,您不认为应该有专门的方法来处理格式化,尤其是日期(java对日期有太多的混乱,现在又是使用java 8的新日期api)?尽管我更喜欢使用SimpleDataFormat,但没有什么可以阻止您创建自己的
LineAggregator
,并将自己的格式逻辑放入其中。我想我们可以添加一种按类型注册自定义变压器的方法,但对于这么简单的事情来说,这可能有点复杂…@Michael Minella-你能分享一下代码片段吗?由于您是Spring批处理的发起者,所以我们总是希望看到代码片段。请做必要的事。你能给我引路吗?