解析字符串到日期和时间但没有得到适当的解析

时间:2012-04-20 06:21:44

标签: java

我正在附上代码。在这段代码中,我正在从一个平面文本文件中获取一个字符串。它由AM / PM(12小时格式)组成。当我解析它时,它解析得不好,不能解析为24小时格式。我想要时间差b / w当前时间和文件中的字符串。而且由于AM / PM,它不能以24小时格式转换。因此无论是PM还是AM,它都显示出相同的时差。如果有的话,请告诉我任何富有成效的建议。我真的很感谢你们。

public class Casting {

/**
 * @param args
 */
    static FileReader fw;
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try{
            fw = new FileReader("E://796F_log.txt");
            BufferedReader pw =new BufferedReader(fw);
            String last_Line_From_File="" ; 

            for (String message  = pw.readLine(); message != null ; message = pw.readLine()) {
                    last_Line_From_File = message;
            }

            String[] array_Of_Data = last_Line_From_File.split("\\s") ;
            String time = array_Of_Data[0]+" "+array_Of_Data[1]+" "+array_Of_Data[2] ;

            System.out.println(time);
            DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
            Calendar cal = Calendar.getInstance();
            String current_time = dateFormat.format(cal.getTime());

            Date d1 = dateFormat.parse(time);
            Date d2 = dateFormat.parse(current_time);



            long total_time = d2.getTime()-d1.getTime();
            total_time /= 1000 ;

            System.out.println("current time "+d2.getHours()+":"+d2.getMinutes()+":"+d2.getSeconds()+"\n"+d1.getHours()+":"+d1.getMinutes()+":"+d1.getSeconds());
            if(total_time <= 500)
            {
                System.out.println("working "+total_time);
            }
            else
                System.out.println("nt working   "+total_time);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("did the smart thing or dumb thing");
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally
        {
            try {
                fw.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("we did attempt closing");

            }

        }
    }

}

1 个答案:

答案 0 :(得分:3)

问题在于您的格式:

"MM/dd/yyyy HH:mm:ss a"

此处HH表示 24小时值。所以它预计在晚上7点“19”。将“HH”和“a”(AM / PM指示符)包含在相同的格式字符串中几乎总是错误。

你可能想要

"MM/dd/yyyy hh:mm:ss a"

"MM/dd/yyyy h:mm:ss a"

取决于您是否收到“07:00:00 AM”或“7:00:00 AM”等内容。

如果你正在做大量的日期/时间工作,我建议顺便使用Joda Time而不是Date / Calendar