2015-02-05 3 views
2

У меня есть строка в формате dHHmm, которая обозначает длительность времени, и вы хотите получить эквивалент minutes.Как разобрать dHHmm на длительность?

Поэтому я пытаюсь преобразовать его в объект org.joda.time.Duration.getMinutes(). Но, похоже, не существует такого DurationParser, который можно было бы использовать для этого.

Как я могу лучше всего преобразовать эту строку?

Это то, что я пытался, но не получилось:

PeriodFormatter formatter = new PeriodFormatterBuilder() 
    .appendDays() 
    .appendHours() 
    .appendMinutes() 
    .toFormatter(); 

assertTrue(formatter.parsePeriod("00310").getMinutes == 190); //failed with =0 
+0

есть вы пробовали 'SimpleDateFormat'? – Steffen

+0

Продолжительность или период не является датой! Я также не хочу разбирать строку в дате, так как это не имеет никакого смысла – membersound

+0

, но у вас нет длительности, но простой 'String' без объяснения формата .... – Steffen

ответ

0

Итак, сначала вы хотите получить org.joda.time.Duration от dHHmm ...

import org.joda.time.Duration; 

public Duration fromTheFormat(String str) { 
    Duration dayDuration = Duration.standardDays(parseInt(str.substring(0, 1))); 
    Duration hourDuration = Duration.standardHours(parseInt(str.substring(1, 3))); 
    Duration minuteDuration = Duration.standardMinutes(parseInt(str.substring(3, 5))); 

    return dayDuration.plus(hourDuration.getMillis()).plus(minuteDuration.millis()); 
} 

или

import org.joda.time.Duration; 
import org.joda.time.Period; 
import org.joda.time.format.PeriodFormatter; 

public Duration fromTheFormat(String str) { 
    Period period = new Period(/* years = */ 0, 
           /* months = */ 0, 
           /* weeks = */ 0, 
           /* days = */ parseInt(str.substring(0, 1)), 
           /* hours = */ parseInt(str.substring(1, 3)), 
           /* minutes = */ parseInt(str.substring(3, 5), 
           /* seconds = */ 0, 
           /* millis = */ 0 
    ); 

    // or best one is 
    PeriodFormatter pf = new PeriodFormatterBuilder() 
          .minimumPrintedDigits(1) 
          .maximumParsedDigits(1) 
          .appendDays() 
          .minimumPrintedDigits(2) 
          .maximumParsedDigits(2) 
          .appendHours() 
          .appendMinutes() 
          .toFormatter(); 

    period = pf.parsePeriod(str); 

    return period.toStandardDuration(); 
} 
+0

Второй пример недействителен Java. Java не имеет названных параметров, что-то вроде 'years = 0', поскольку аргумент является синтаксической ошибкой. – Jesper

+0

В 'PeriodFormatterBuilder' нет' .minimumParsedDigits() '!? – membersound

+0

@membersound ... да ... правда. –

Смежные вопросы