-1

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

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中使用什么日期格式来格式化日期?帮助!

4

3 回答 3

4

我猜你MMYYHHMMSS的意思是“月年时分秒”。因此,使用为 记录的模式说明符SimpleDateFormat,应该是"MMddHHmmss". (如以下评论中所述,第二部分是日,而不是年。)

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

于 2013-04-12T06:15:29.490 回答
1

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

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

于 2013-04-12T06:23:13.107 回答
0

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

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

于 2013-04-23T21:14:26.937 回答