--- /dev/null
+package tim.prune.data;
+
+import tim.prune.I18nManager;
+
+/**
+ * Class to represent a time difference, like the difference between two Timestamp objects,
+ * and methods for representing and displaying them.
+ */
+public class TimeDifference
+{
+ private long _totalSeconds = 0L;
+ private int _seconds = 0;
+ private int _minutes = 0;
+ private int _hours = 0;
+ private String _description = null;
+
+
+ /**
+ * Constructor using long
+ * @param inNumSeconds number of seconds time difference
+ */
+ public TimeDifference(long inNumSeconds)
+ {
+ _totalSeconds = inNumSeconds;
+ if (inNumSeconds < 0) {inNumSeconds = -inNumSeconds;}
+ _hours = (int) (inNumSeconds / 60 / 60);
+ _minutes = (int) (inNumSeconds / 60 - _hours * 60);
+ _seconds = (int) (inNumSeconds % 60);
+ }
+
+
+ /**
+ * Constructor giving each field separately
+ * @param inHours number of hours
+ * @param inMinutes number of minutes
+ * @param inSeconds number of seconds
+ * @param inPositive true for positive time difference
+ */
+ public TimeDifference(int inHours, int inMinutes, int inSeconds, boolean inPositive)
+ {
+ // Check for negative values?
+ _hours = inHours;
+ _minutes = inMinutes;
+ _seconds = inSeconds;
+ _totalSeconds = inHours * 3600L + inMinutes * 60L + inSeconds;
+ if (!inPositive) {_totalSeconds = -_totalSeconds;}
+ }
+
+
+ /**
+ * @return total number of seconds time difference
+ */
+ public long getTotalSeconds()
+ {
+ return _totalSeconds;
+ }
+
+ /**
+ * @return number of hours
+ */
+ public int getNumHours()
+ {
+ return _hours;
+ }
+
+ /**
+ * @return number of minutes
+ */
+ public int getNumMinutes()
+ {
+ return _minutes;
+ }
+
+ /**
+ * @return number of seconds
+ */
+ public int getNumSeconds()
+ {
+ return _seconds;
+ }
+
+ /**
+ * @return true if time difference positive
+ */
+ public boolean getIsPositive()
+ {
+ return _totalSeconds >= 0L;
+ }
+
+
+ /**
+ * Build a String to describe the time duration
+ * @return time as a string, days, hours, mins, secs as appropriate
+ */
+ public String getDescription()
+ {
+ if (_description != null) {return _description;}
+ StringBuffer buffer = new StringBuffer();
+ boolean started = false;
+ // hours
+ if (_hours > 0)
+ {
+ buffer.append(_hours).append(' ').append(I18nManager.getText("display.range.time.hours"));
+ started = true;
+ }
+ // minutes
+ if (_minutes > 0)
+ {
+ if (started) {buffer.append(", ");}
+ else {started = true;}
+ buffer.append(_minutes).append(' ').append(I18nManager.getText("display.range.time.mins"));
+ }
+ // seconds
+ if (_seconds > 0 || !started)
+ {
+ if (started) {buffer.append(", ");}
+ buffer.append(_seconds).append(' ').append(I18nManager.getText("display.range.time.secs"));
+ }
+ _description = buffer.toString();
+ return _description;
+ }
+
+}