2013-04-12 26 views
-1

我使用下面的函數返回一個格式化字符串日期:如何格式化ISO m8583的Java使用日期?

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, "2"); 
    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

我猜你想MMYYHHMMSS意思是「月份時分秒」。因此使用記錄爲SimpleDateFormat的模式說明符,應該是"MMddHHmmss"。 (如在下面的評論指出,第二部分,就是要一天,而不是一年。)

順便說一句,我也強烈建議您不要使用String(byte[])構造函數:指定編碼爲另一論點,使用String(byte[], String)String(byte[], Charset)

+0

謝謝飛碟雙向 – user2194528

+0

了一份關於ISO 8583的格式。字段7應該是'MMddHHmmss'「月份日時分秒」 –

+0

@JohnOxley:謝謝 - 將解決此問題並指出您的評論。 –

1

該錯誤似乎是由給定的字符串的長度引起的。您指定的格式應爲10個字符,但生成的字符串長度爲11個字符。這很可能是爲什麼刪除前導零可以解決問題。

你得到一個字符串一個字符太長的原因可能是由於Jon Skeet提供的原因; SimpleDateFormat的模式說明符。