Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将时间字符串分析为指定格式_Java_Validation_Date_Datetime_Time - Fatal编程技术网

Java 无法将时间字符串分析为指定格式

Java 无法将时间字符串分析为指定格式,java,validation,date,datetime,time,Java,Validation,Date,Datetime,Time,我需要比较我输入的两个时间字符串。。我能做的日期,但时间,我不能做这件事。请在下面找到我尝试的代码: 我的问题是我能够根据我输入的格式获取时间格式,该格式将是字符串,但我无法解析它。因为只有解析它,我才能比较并找出变量时间域是否能得到差异。请在下面找到我们已完成的代码: try{ DateFormat df = new SimpleDateFormat(format); //假设我输入的格式是HH:mm:ss df.setLenient(false);

我需要比较我输入的两个时间字符串。。我能做的日期,但时间,我不能做这件事。请在下面找到我尝试的代码:

我的问题是我能够根据我输入的格式获取时间格式,该格式将是字符串,但我无法解析它。因为只有解析它,我才能比较并找出变量时间域是否能得到差异。请在下面找到我们已完成的代码:

try{
DateFormat df = new SimpleDateFormat(format);
//假设我输入的格式是HH:mm:ss

    df.setLenient(false);

                T1 = new Date();  //here we will get the current Time
                temp_Time = df.format(T1); 
//我们更改为请求的格式(示例格式–HH:mm:ss.So Temp\u Time=18:20:45)。

                T1 = df.parse(temp_Time); 

//当我们试图解析它时,我们得到了1970年1月1日星期四13:24:40。我们可以解析日期,但只能解析时间格式。它不起作用。

为了查看解析结果的外观(类型为
java.util.Date
)您必须再次格式化它:

                T1 = df.parse(temp_Time); 
DateFormat df = new SimpleDateFormat("HH:mm:ss");
Date time = df.parse("18:20:45");

// visualizing the result
System.out.println(df.format(time)); // output: 18:20:45
您不能仅仅依赖
System.out.println(time)
,因为该代码只使用
java.util.Date
toString()的输出,该输出依赖于系统时区,并基于日期1970-01-01打印整个时间戳作为日期偏移量(由于输入字符串中缺少日期信息,
SimpleDateFormat
使用该格式)

为了比较时间字符串,您应该使用时间降序(从左到右),如ISO-8601-format
HH:mm:ss
中所述,因此这里的字符串比较就足够了

由于评论而更新:

如果您使用解析的唯一考虑是比较时间对象,那么我仍然认为ISO格式时间字符串的字符串比较是最简单和最直接的选择,因为您可以完全不进行解析。ISO-8601甚至定义了其时间格式“HH:mm:ss”,以满足订购要求


如果您除了简单的比较之外还有更多的计划/意图,那么您当然可以将时间字符串解析为
Date
-对象,并根据注释中的方法
getTime()
比较这些解析的对象,并使用(丑陋且半不推荐的)执行其他操作
日期
-对象。

请展示一个简短但完整的程序来演示问题。目前还不清楚。如果只给它一个时间,它必须猜测日期,因此它假定为1970年1月1日。如果要比较时间,可能最好比较格式化的字符串。是否尝试过类似示例2的方法?找到了解决方案操作
Date Time1=new Date();Date Time2=new Date();simpledteformat sdf=new simpledteformat(“HH:mm:ss”);String temp1=sdf.format(Time1);
**//以指定格式获取
String temp2=“09:00:00”;
日期d1=sdf.parse(temp1);
//输出-1970年1月1日至13:24:40日期d2=sdf.parse(temp2)//输出-Thu Jan 01 09:00:00 IST 1970
long y=d1.getTime();
//您将以毫秒为单位获得时间
long z=d2.getTime();
//您将以毫秒为单位获得时间,找到更大的时间并转换回--
d1=新日期(l);sdf.format(d1);
//输出-13:24:40@AlexMichaelRaj感谢您深入了解您的动机,尽管您的代码示例尚未完全编译。我还更新了我的答案,为您展示了一个更简单的选择。但是,也许您确实需要
日期
-对象。