Joda time, Period to total millis

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.


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();

Using Joda time 2.3, it is:

toStandardDuration().getMillis()

Tags:

Java

Jodatime