dror
dror

Reputation: 3946

Joda time, Period to total millis

I'm trying to get the total amount of Milliseconds (not the millis field) from the Period object instance. I've tried multiple conversions, as I couldn't find any method easily giving it.

Has anyone ever needed that and managed to retrieve it ?

(I need this for my patch, to figure out a negative period; negative millis = negative period.)

Upvotes: 22

Views: 14193

Answers (3)

Wim Deblauwe
Wim Deblauwe

Reputation: 26868

Using Joda time 2.3, it is:

toStandardDuration().getMillis()

Upvotes: 2

Joe M
Joe M

Reputation: 2657

If you want to get the millis from a specific time it can be done by using the plus() or minus() methods of the DateTime class.

e.g. getting the millis from now

 DateTime start = new DateTime();  //NOW
 DateTime end = start.plus(<your period>);
 long millis = end.getMillis() - start.getMillis();

Upvotes: 3

skaffman
skaffman

Reputation: 403551

You can't get the millis directly from a Period, since fields like months and years are variable in terms of milliseconds.

In order to make this work, you need to supply a "baseline" instant from which Period can calculate that actual millisecond duration.

For example, the Period.toDurationFrom and Period.toDurationTo methods take such a baseline instant, and calculate a Duration object, which you can then obtain the millis.

The Javadoc for toDurationFrom says:

Gets the total millisecond duration of this period relative to a start instant. This method adds the period to the specified instant in order to calculate the duration.

An instant must be supplied as the duration of a period varies. For example, a period of 1 month could vary between the equivalent of 28 and 31 days in milliseconds due to different length months. Similarly, a day can vary at Daylight Savings cutover, typically between 23 and 25 hours.

So you need to pick an appropriate baseline instant for your application.

Upvotes: 17

Related Questions