无法将时间字符串解析为指定的格式

时间:2014-04-22 14:37:51

标签: java validation date datetime time

我需要比较我输入的两个时间字符串..我能够为日期做,但是时间我无法做到。请在下面找到我尝试的代码:

我的问题是.. - 我能够根据我输入的格式获取时间格式,这将是字符串但我无法解析它。因为只有解析它我才能比较并找出变量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。所以Temp_Time = 18:20:45)。

                T1 = df.parse(temp_Time); 

//当我们尝试解析它时,我们得到Thu Jan 01 13:24:40 IST 1970.我们能够解析Date,只针对时间格式它不起作用。

1 个答案:

答案 0 :(得分: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 - 对象,并根据评论中的方法getTime()比较这些解析的对象并做(丑陋和半弃)Date - 对象的其他附加内容。