2014-04-22 63 views
0

我需要比较两个时间字符串,我已经输入..我能够做它的日期,但时间我无法做到这一点。请在下面找到我试过的代码:无法解析时间字符串到指定的格式

我的问题是.. - 我能够根据格式输入格式来获取时间格式,但是我无法解析它。因为只有在解析它的时候,我才能够比较并找出Varible Time字段是否可以获得差异。请找我们做了下面的代码:

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_Time = 18:20:45)。

   T1 = df.parse(temp_Time); 

//当我们尝试分析它,我们得到星期四1月1 IST十三点24分四十秒1970年我们能够解析为日期,只为它不工作的时间格式。

+0

请显示一个简短但完整的程序来展示问题。目前还不清楚。 –

+0

如果你只给它一次,它必须猜测日期,所以它假定为1.1.1970。如果你想比较时间,比较格式化的字符串可能会更好。 –

+0

您是否尝试过类似于http://www.mkyong.com/java/how-to-convert-string-to-date-java/上的示例2? – WOUNDEDStevenJones

回答

2

为了看到你的语法分析结果的样子(java.util.Date类型的对象),你必须重新格式化:

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)依赖,因为该代码只使用输出toString()java.util.Date,它依赖于系统时区,并根据日期1970-01-01打印整个时间戳作为日期偏移量(由于缺少输入字符串中的日期信息而被SimpleDateFormat使用)。

为了比较时间字符串,您应该按照ISO-8601格式HH:mm:ss中按时间顺序降序排列(从左到右),因此这里进行字符串比较就足够了。

,因为评论的更新:

如果你只关心使用的解析是比较时间对象,然后我仍然认为ISO格式的时间字符串的那个字符串比较是最简单和直接的选项因为你可以完全离开解析工作。 ISO-8601甚至已根据订购要求定义了其时间格式“HH:mm:ss”。

如果您有更多的计划/超越了简单的比较用心,那么你当然可以解析的时间字符串Date -objects和您的评论方法getTime()的基础上,这些分析的对象比较喜欢做其他额外的东西用(丑和一半弃用)Date - 对象。

+0

找到解决方案 'Date Time1 = new Date(); Date Time2 = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(“HH:mm:ss”); String temp1 = sdf。格式(Time1);'** //获取指定格式 'String temp2 =“09:00:00”;' 'Date d1 = sdf.parse(temp1);''输出 - Thu Jan 01 13 :24:40 IST 1970 'Date d2 = sdf.parse(temp2);'//输出 - Thu Jan 01 09:00:00 IST 1970 'long y = d1.getTime();'''以毫秒为单位的时间 'long z = d2.getTime();''您将获得以毫秒为单位的时间 现在找到哪个更大并且转换回来 - 'd1 = new Date(l); sdf.format(d1); ' //输出 - 13:24:40 –

+0

@AlexMichaelRaj感谢您更深入了解您的动机,尽管您的代码示例没有完全编译。我也更新了我的答案,向你展示了一个更简单的选择。但是也许你真的需要'日期'对象。 –