Necesito analizar una cadena de duración, del formulario 98d 01h 23m 45s
en milisegundos.Cadena de duración del análisis en milisegundos
Esperaba que hubiera un equivalente de SimpleDateFormat
para duraciones como esta, pero no pude encontrar nada. ¿Alguien podría recomendar a favor o en contra de intentar usar SDF para este propósito?
Mi plan actual es el uso de expresiones regulares para que coincida con los números en contra y hacer algo como
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher("98d 01h 23m 45s");
if (m.find()) {
int days = Integer.parseInt(m.group());
}
// etc. for hours, minutes, seconds
y luego usar TimeUnit a poner todo junto y convertir a milisegundos.
Supongo que mi pregunta es, esto parece exagerado, ¿se puede hacer más fácil? Aparecieron muchas preguntas sobre fechas y marcas de tiempo, pero esto es un poco diferente, tal vez.
Su enfoque se ve bien hasta ahora. Sin embargo, hay que tener cuidado con 'Integer.parseInt()' y los ceros a la izquierda. Algo como '... 08h ...' se interpretará como octal y no se analizará. Elimina cualquier cerco a la izquierda. –
@PhilippReichart ¿no es seguro como lo estoy usando anteriormente, ya que 'Integer.parseInt (" 08 ")' devuelve '8'? – Craigy
Quizás su forma de pensar en espacios principales. 'System.out.println (" Integer.parseInt ("009")); 'imprime" 9 "en mi máquina. La' h' no se debe pasar a 'parseInt', sin embargo. – Gene