0

我附上代码。在这段代码中,我正在获取一个字符串,它是来自平面文本文件的日期。它由 AM/PM(12 小时制)组成。当我解析它时,它不能很好地解析,不能以 24 小时格式解析。我想要当前时间和文件中的字符串的时间差。并且由于 AM/PM,它没有转换为 24 小时格式。所以无论是下午还是上午,它都显示相同的时差。所以,如果你有任何富有成效的建议,请告诉我。我会非常感谢你们。

公共类铸造{

/**
 * @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");

            }

        }
    }

}

4

1 回答 1

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,顺便说一句。

于 2012-04-20T06:25:25.160 回答