如何格式化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:谢谢-将修复此问题并指出您的评论。