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

如何格式化ISO m8583的Java utill日期?,java,iso8583,jpos,openiso8583.net,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.

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

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中,我应该使用什么日期格式来格式化日期?救命啊

我猜您希望
mmyyhhmms
的意思是“月-年-时-分-秒”。因此,使用的模式说明符应该是
“MMddHHmmss”
。(如下面的评论所述,第二部分是指日,而不是年。)


另外,我还强烈建议不要使用
String(byte[])
构造函数:将编码指定为另一个参数,可以使用
String(byte[],String)
String(byte[],Charset)

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


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

您使用
ISODate.getDateTime(日期d)
ISODate.getDateTime(日期,时区)


参见ISO 8583格式的注释。字段7应该是
MMddHHmmss
“月-日-小时-分钟-秒”@JohnOxley:谢谢-将修复此问题并指出您的评论。