2013-11-19 5 views
0

я могу получить целое число секунд между двумя DateTimes используя Seconds класс:Дважды типа секунд между Joda-Time DateTimes

Seconds.secondsBetween(now, dateTime);

Однако, это не для меня ясно, как Joda-TimeAPI бы я получаю разницу с дробными секундами, то есть секундами как двойной? Нужно ли вычислять дробные секунды с миллисекунд или тиков? API, как правило, такой элегантный и выразительный, я чувствую, что мне что-то не хватает ...

+0

У меня была аналогичная проблема с JodaTime. Короткий ответ: Нет, нет «простого» способа получить дробные секунды. – user1567896

ответ

1

Не слишком сложно ... Используйте класс Interval в Joda-Time 2.3.

Пример кода в Java 7 ...

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 

// A good practice is to specify your time zone rather than rely on default. 
org.joda.time.DateTimeZone californiaTimeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles"); 

// Now. 
org.joda.time.DateTime now = new org.joda.time.DateTime(californiaTimeZone); 

// Wait a moment. 
try { 
    java.util.concurrent.TimeUnit.MILLISECONDS.sleep(3500); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

// Later. 
org.joda.time.DateTime aMomentLater = new org.joda.time.DateTime(californiaTimeZone); 

// Elapsed. 
org.joda.time.Interval interval = new org.joda.time.Interval(now, aMomentLater); 
long milliseconds = interval.toDurationMillis(); 
double seconds = ((double)milliseconds/1000); 

// Display 
System.out.println("Elapsed: " + seconds + " seconds. (" + milliseconds + " milliseconds)"); 

При запуске ...

Elapsed: 3.533 seconds. (3533 milliseconds) 

В качестве способа удобства ...

double elapsedSeconds(org.joda.time.DateTime start, org.joda.time.DateTime stop) 
{ 
    org.joda.time.Interval interval = new org.joda.time.Interval(start, stop); 
    long milliseconds = interval.toDurationMillis(); 
    double seconds = ((double)milliseconds/1000); 
    return seconds; 
} 

Пример использования ...

System.out.println("Calculating Elapsed: " + myObject.elapsedSeconds(now, aMomentLater)); 
+0

Спасибо, Василий. Это похоже на подход, который я сделал до сих пор - вычислить разницу в миллисекундах, а затем преобразовать в секунды. Возможно, конверсия из миллисов или тиков - единственный вариант? – HolySamosa

+0

@HolySamosa Да, если вы хотите дробные секунды, используйте миллисекунды и умножьте на тысячу. Если вам нужны целые секунды, используйте класс [Seconds] (http://www.joda.org/joda-time/apidocs/org/joda/time/Seconds.html) в Joda-Time 2.3. Пример с использованием переменной 'interval', созданной в исходном коде этого ответа:' org.joda.time.Seconds.secondsIn (интервал) .toSeconds() ' –

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