我正在使用以下函数返回格式化的字符串日期:
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中使用什么日期格式来格式化日期?救命啊!
答案 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)
。