为什么我的GUI中出现了错误的日期时间格式?

时间:2013-03-19 21:32:38

标签: java swing parsing calendar simpledateformat

我正在研究客户端服务器应用程序,服务器将一些东西发送到客户端,客户端可以看到GUI中显示的项目。 我可以从服务器完美地发送所有内容,以便在客户端的JTextarea中显示。但是,我面临的一个问题是在客户端显示日期,我得到一个长文本,看起来像这个java.util.Gregeon CalenderCalender [时间?=等.....在GUI的textarea中。在所有文本之后,我仍然可以在textarea的底部看到日期,但格式不正确。

这是客户端代码的一部分,用于处理从服务器接收信息并在GUI上显示信息。

        public void  displayItems() 
{
    Integer itemNumber = networkInput.nextInt();
    networkInput.nextLine();
    //String bidTime = networkInput.next();
    //= networkInput.next();

    DefaultListModel<String> lmdl = new DefaultListModel<String>();

    for(int i=0; i<itemNumber; i++)
    {
        String itemCode = networkInput.nextLine();
        String itemName = networkInput.nextLine();
        String itemDescription = networkInput.nextLine();
        String date = networkInput.nextLine();
        System.out.println(date);
        int hrs = Integer.parseInt(date.substring(0,2));
        int mins = Integer.parseInt(date.substring(3,5));
        Items item = new Items(itemCode,itemName,itemDescription, hrs, mins);
        itemList.add(item);

        lmdl.addElement(item.getItemCode());


    }
    ItemList.setModel(lmdl);// Add to List


}
   class ButtonHandler implements ActionListener 
   {
       private Object sel;
        public void actionPerformed(ActionEvent e) 
        {
            int selectedIx = ItemList.getSelectedIndex();
            String bid = txtBidAmount.getText();
            System.out.println("Sending the bid for " + itemList.get(selectedIx).getItemCode() + " for " + bid);

            output.println("bid");
            output.println(itemList.get(selectedIx).getItemCode());
            output.println(bid);

            String serverResponce = networkInput.nextLine();
            System.out.println(serverResponce);
            if(serverResponce.contains("success"))
            {
                //display sucess
                JOptionPane.showMessageDialog(frame,"Bid accepted");
            }
            else
            {
                JOptionPane.showMessageDialog(frame,"low bid");
            }


        }
   }

  class  RefreshListner implements ListSelectionListener{
     //String date = networkInput.nextLine();
    @Override
    public void valueChanged(ListSelectionEvent arg0) {

        Integer IDx = ItemList.getSelectedIndex();
        text.setText(itemList.get(IDx).getName()+ "\n" + itemList.get(IDx).getDescription() + itemList.get(IDx).getDeadline());


    }


  }

}

2 个答案:

答案 0 :(得分:2)

GregorianCalendar的toString方法不会产生显示友好的时间字符串。在将其设置为文本区域之前,您需要使用DateFormatter将其转换为更“愉快”的格式。下面是一个可以扩展的简单示例:

Calendar calendar = new GregorianCalendar();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(calendar.getTime());

答案 1 :(得分:1)

问题是你从输入字符串中获取时间:

String date = networkInput.nextLine();
int hrs = Integer.parseInt(date.substring(0,2));
int mins = Integer.parseInt(date.substring(3,5));

您的输入行看起来像“10:39” - 解析完整日期(包括日,月和年)并创建日历对象:

DateFormat df = new SimpleDateFormat("dd/mm/yyyy HH:mm");
Date date = df.parse(networkInput.nextLine());

然后使用日期对象,如果需要,可以随时使用。