2013-04-12 4 views
-1

Я использую следующую функцию, которая возвращает отформатированную строку даты:Как отформатировать дату Java для ISO m8583?

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 символов. Вероятно, поэтому удаление начального нуля устраняет проблему.

Причина, по которой вы получаете строку с одним символом слишком долго, вероятно, объясняется тем, что предоставил Джон Скит; спецификаторы patter для SimpleDateFormat.

Смежные вопросы