2014-09-04 110 views
1

有没有什么办法可以将这种格式的时间2640 Hrs : 00 Mts转换为14:22:57 hrs在java中Json时间格式问题

我尝试了很多方法,似乎没有任何工作。我真的需要帮助。

JSON数组

{"ElapsedTime":"2642 Hrs : 59 Mts"}

代码我试图

DateFormat dateFormat = new SimpleDateFormat("hh:mm:ss"); 
Date date = dateFormat.parse(jsonDate); 
return dateFormat.format(date); 

上面的代码抛出该异常

java.text.ParseException: Unparseable date: "2640 Hrs : 00 Mts" (at offset 4) 

我使用凌空GsonRequest和我能够解析它无法格式化时间。

+0

这不是*时间*,而是*持续时间*。在java8中,您可以使用类java.time.Duration。但是你仍然需要手动解析它。 – agad 2014-09-04 12:40:05

+0

可能的重复[如何在java中设置持续时间? (例如格式H:MM:SS)](http://stackoverflow.com/questions/266825/how-to-format-a-duration-in-java-eg-format-h​​mmss) – agad 2014-09-04 12:41:42

+3

不是重复 – 2014-09-04 12:43:32

回答

1

对我来说这不是一个已知的时间格式,也不是“标准化”,这意味着它给你2642个小时,这不适合24小时的时钟。

所以我会用手工解析,像去:

Pattern pattern = Pattern.compile("([0-9]*) Hrs : ([0-9]*) Mts"); 
Matcher matcher = pattern.matcher(jsonString); 
int hours = Integer.parseInt(matcher.group(1)); 
int minutes = Integer.parseInt(matcher.group(2)); 
long time = (hours * 60) + minutes; // In minutes 
time *= 60000; // In milliseconds 
return dateFormat.format(new Date(time)); 

我没有测试此代码,所以因人而异,但你应该明白我的意思。

+0

如果该值大于24小时,这将不起作用。 – agad 2014-09-04 12:47:49

+0

@agad,为什么不呢? – 2014-09-04 12:52:43

+0

试试看:\t \t * SimpleDateFormat format = new SimpleDateFormat(“hh:mm:ss”); \t \t \t \t的System.out.println(format.format(新的日期(26 * 60 * 60 * 1000))); *结果是:03:00:00 – agad 2014-09-04 12:57:02