Java 将字符串解析为日期和时间,但未获得适当的解析

Java 将字符串解析为日期和时间,但未获得适当的解析,java,Java,我正在附上密码。在这段代码中,我从一个平面文本文件中获取一个日期字符串。它包括上午/下午(12小时格式)。当我解析它的时候,它并没有很好地解析,也不是24小时格式的解析。我想要时差,包括当前时间和文件中的字符串。由于AM/PM,它不能以24小时格式转换。所以无论是下午还是上午,它都显示相同的时差。因此,如果你有任何富有成效的建议,请告诉我。我真的很感谢你们 公共类演员{ /** * @param args */ static FileReader fw; public sta

我正在附上密码。在这段代码中,我从一个平面文本文件中获取一个日期字符串。它包括上午/下午(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");

            }

        }
    }
/**
*@param args
*/
静态文件阅读器;
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
试一试{
fw=newfilereader(“E://796F_log.txt”);
BufferedReader pw=新的BufferedReader(fw);
字符串来自_文件的最后一行_=“”;
对于(字符串message=pw.readLine();message!=null;message=pw.readLine()){
来自文件的最后一行=消息;
}
字符串[]数组\u的\u数据=来自\u文件的最后一行\u。拆分(“\\s”);
字符串时间=数组数组数组数组数据[0]+“”+数组数组数组数组数据[1]+“”+数组数组数组数据[2];
系统输出打印LN(时间);
DateFormat DateFormat=新的简化格式(“MM/dd/yyyy HH:MM:ss a”);
Calendar cal=Calendar.getInstance();
字符串current_time=dateFormat.format(cal.getTime());
dated1=dateFormat.parse(时间);
Date d2=dateFormat.parse(当前时间);
long total_time=d2.getTime()-d1.getTime();
总时间/=1000;
System.out.println(“当前时间”+d2.getHours()+”:“+d2.getMinutes()+”:“+d2.getSeconds()+”\n“+d1.getHours()+”:“+d1.getMinutes()+”:“+d1.getSeconds());

如果(总时间问题在于您的格式:

"MM/dd/yyyy HH:mm:ss a"
这里的
HH
表示24小时值。因此它期望7pm为“19”。在同一格式字符串中同时包含“HH”和“a”(AM/PM指示符)几乎总是错误的

你可能也想要

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

这取决于你得到的是“07:00:00 AM”还是“7:00:00 AM”


如果您要做大量的日期/时间工作,我建议您使用日历,而不是日期。

问题在于您的格式:

"MM/dd/yyyy HH:mm:ss a"
这里的
HH
表示24小时值。因此它期望7pm为“19”。在同一格式字符串中同时包含“HH”和“a”(AM/PM指示符)几乎总是错误的

你可能也想要

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

这取决于你得到的是“07:00:00 AM”还是“7:00:00 AM”


如果您正在做大量的日期/时间工作,我建议您使用而不是
日期
/
日历

请提供输入和输出字符串…以便我们可以跟踪错误…快速注意:如果没有所有的文件处理代码,您的问题会更清楚,但有一个in示例放置。您也不应该在
Date
中使用不推荐的方法。请提供输入和输出字符串…以便我们可以跟踪错误…简要说明:如果没有所有文件处理代码,但有一个输入示例,您的问题会更清楚。您也不应该在
中使用不推荐的方法>日期
.thnx很多我被那个问题困住了…在过去的三天里…thnx一顿thnx很多我被那个问题困住了…在过去的三天里…thnx一吨