如何格式化ISO m8583的Java实用日期?

时间:2013-04-12 06:12:17

标签: java iso8583 jpos openiso8583.net

我正在使用以下函数返回格式化的字符串日期:

private static String formatDate(String format) {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat(format);

    String strDate = sdf.format(date);
    return strDate;
}

此函数返回,例如,如果我使用以下格式调用它:

System.out.println(formatDate("MMYYHHMMSS"));

它打印:04130904803

当我使用上述日期创建ISO消息时,例如

// Create ISO Message
    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setPackager(packager);
    isoMsg.setMTI("0200");
            isoMsg.set(2, "100002");
    isoMsg.set(3, "201234");
    isoMsg.set(7, "04130904803");
    isoMsg.set(11, "123456");
    isoMsg.set(44, "A5DFGR");
    isoMsg.set(105, "ABCDEFGHIJ 1234567890");


    // Get and print the output result
    byte[] data = isoMsg.pack();

            unpackISO(new String(data));

我收到以下错误: =>错误:错误打包字段7 但是当我在字段7中删除前面的日期零时,我工作正常。我应该在java中使用什么日期格式来格式化日期?救命啊!

3 个答案:

答案 0 :(得分:4)

我猜你希望MMYYHHMMSS表示“月年小时秒”。因此,使用SimpleDateFormat记录的模式说明符,应为"MMddHHmmss"。 (如下面的评论所述,第二部分是日,而不是一年。)

顺便说一下,我强烈建议您不要使用String(byte[])构造函数:使用String(byte[], String)或{{1将编码指定为另一个参数}}

答案 1 :(得分:1)

错误似乎是由给定的String的长度引起的。您指定的格式应为10个字符长,但生成的字符串长度为11个字符。这可能是为什么删除前导零可以解决问题。

你得到一个字符串太长的原因可能是由于Jon Skeet提供的原因; SimpleDateFormat的模式说明符。

答案 2 :(得分:0)

您使用ISODate.getDateTime(Date d)ISODate.getDateTime(Date, TimeZone)

请参阅http://jpos.org/doc/javadoc/org/jpos/iso/ISODate.html