2016-01-12 2 views
1

Я использую javax.measure для преобразования пользовательского ввода в секунды, который может варьироваться от секунд до нескольких дней, однако преобразование из любой единицы в другую не работает, вот что я имею настроить.Javax.measure.quantity.Duration conversion issue

String units = "d"; 
double value = 30.0; 
BaseUnit<Duration> unitType = new BaseUnit<Duration>(units); 
UnitConverter toSeconds = unitType.getConverterTo(NonSI.DAY); 
double s = toSeconds.convert(Measure.valueOf(value, unitType).doubleValue(unitType)); 

Но я получаю эту ошибку

Exception in thread "main" javax.measure.converter.ConversionException: d is not compatible with s 
at javax.measure.unit.Unit.searchConverterTo(Unit.java:259) 
at javax.measure.unit.Unit.getConverterTo(Unit.java:248) 
at FAMain.main(FAMain.java:18 

Эта ошибка возникает в любой комбинации, независимо, если это Nonsi к Nonsi. Я могу преобразовать длину любым способом, просто отлично, но по какой-то причине Unit не работает.

+0

что вы пытаетесь сделать? код выглядит нечитаемым беспорядком разных объектов. Что нужно перевести на что? –

+0

Извините, пользовательский ввод должен быть преобразован в секунды, и указанный вход может варьироваться от секунд до дней – pianoisland

+0

, что вводится пользователем? каковы допустимые значения для ввода пользователем? –

ответ

2

Основная проблема, которую вы не можете просто создать new BaseUnit<Duration>("d"); и предположите, что она каким-то образом станет NonSI.DAY.

вероятно, здесь является отправной точкой:

public static double toSeconds(final String unit, final double value) { 
    switch (unit.toLowerCase()) { 
    case "d": 
    case "day": 
     return NonSI.DAY.getConverterTo(SI.SECOND).convert(value); 
    case "m": 
    case "minute": 
     return NonSI.MINUTE.getConverterTo(SI.SECOND).convert(value); 
    case "s": 
    case "second": 
     return value; 
    default: 
     throw new IllegalArgumentException(unit); 
    } 
} 
+0

Спасибо, что работает, но запутанная вещь заключается в том, что мой синтаксис работает для Length, в чем причина этого несоответствия? – pianoisland

+0

@pianoisland не может точно сказать, не видя кода –

+0

Код длины - это именно то, что я написал выше, просто замените Duration for Length и любой класс Length вместо классов времени. Также есть ли способ полностью полагаться на библиотеку javax.measure для обработки строк блока? в случае получения строк, таких как mins, min, sec, seconds и т. д.? – pianoisland

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