Potrzebuję przeanalizować ciąg znaków o długości od 98d 01h 23m 45s
do milisekund.Łańcuch czasu analizy w milisekundach
Miałem nadzieję, że był odpowiednik SimpleDateFormat
na takie czasy, ale nie mogłem nic znaleźć. Czy ktoś poleciłby lub nie próbował użyć SDF do tego celu?
Mój obecny plan jest aby użyć wyrażenia regularnego do meczu z numerami i zrobić coś jak
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
a następnie użyć TimeUnit umieścić to wszystko razem i konwertować do milisekund.
Domyślam się, że moje pytanie brzmi: przesada, czy można to zrobić łatwiej? Pojawiło się wiele pytań dotyczących dat i sygnatur czasowych, ale może trochę inaczej.
Twoje podejście wygląda dobrze. Ostrożnie z 'Integer.parseInt()' i wiodącymi zerami, chociaż. Coś takiego jak "... 08h ..." będzie interpretowane jako ósemkowe i nie będzie parsowane. Usuń wszystkie wiodące zera. –
@PhilippReichart nie jest bezpieczny sposób, w jaki używam go powyżej, ponieważ 'Integer.parseInt (" 08 ")' zwraca '8'? – Craigy
Być może Twoje myślenie o wiodących przestrzeniach. 'System.out.println (" Integer.parseInt ("009")); 'wypisuje" 9 "na moim komputerze' 'h' nie powinien być przekazany do' parseInt', jednak – Gene