【问题标题】:Unable to Parse Time String to specified format无法将时间字符串解析为指定格式
【发布时间】:2014-04-22 14:37:51
【问题描述】:

我需要比较我输入的两个时间字符串。我可以为日期执行此操作,但对于时间我无法执行此操作。请在下面找到我尝试过的代码:

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

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。我们能够解析日期,但只有时间格式不起作用。

【问题讨论】:

  • 请展示一个简短但完整的程序来说明问题。目前还不清楚。
  • 如果你只给它一个时间,它必须猜测日期,所以它假设 1.1.1970。如果要比较时间,最好比较格式化字符串。
  • 您在mkyong.com/java/how-to-convert-string-to-date-java 尝试过类似示例 2 的方法吗?

标签: java validation date datetime time


【解决方案1】:

为了查看解析结果的样子(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),因为该代码仅使用java.util.DatetoString() 的输出,该输出取决于系统时区,并基于日期1970-01-01 打印整个时间戳作为日期偏移量( SimpleDateFormat 由于输入字符串中缺少日期信息而使用)。

为了比较时间字符串,您应该使用按时间顺序降序(从左到右),如 ISO-8601 格式 HH:mm:ss,所以这里的字符串比较就足够了。

因评论而更新:

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

如果除了简单比较之外,您还有更多计划/意图,那么您当然可以将时间字符串解析为 Date-objects 并根据您的评论中的 getTime() 方法比较这些解析的对象,并使用(丑陋和半弃用的)Date-objects。

【讨论】:

  • 找到解决方案 Date Time1 = new Date(); Date Time2 = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); String temp1 = sdf.format(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
  • @AlexMichaelRaj 感谢您更深入地了解您的动机,尽管您的代码示例没有完全编译。我还更新了我的答案,向您展示了一个更简单的选择。但也许你真的需要Date-objects。
猜你喜欢
  • 2021-07-13
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多