| 1 16 package org.joda.time.base; 17 18 import java.io.Serializable ; 19 20 import org.joda.time.Chronology; 21 import org.joda.time.DateTimeUtils; 22 import org.joda.time.MutableInterval; 23 import org.joda.time.ReadWritableInterval; 24 import org.joda.time.ReadableDuration; 25 import org.joda.time.ReadableInstant; 26 import org.joda.time.ReadableInterval; 27 import org.joda.time.ReadablePeriod; 28 import org.joda.time.chrono.ISOChronology; 29 import org.joda.time.convert.ConverterManager; 30 import org.joda.time.convert.IntervalConverter; 31 import org.joda.time.field.FieldUtils; 32 33 48 public abstract class BaseInterval 49 extends AbstractInterval 50 implements ReadableInterval, Serializable { 51 52 53 private static final long serialVersionUID = 576586928732749278L; 54 55 56 private Chronology iChronology; 57 58 private long iStartMillis; 59 60 private long iEndMillis; 61 62 70 protected BaseInterval(long startInstant, long endInstant, Chronology chrono) { 71 super(); 72 iChronology = DateTimeUtils.getChronology(chrono); 73 checkInterval(startInstant, endInstant); 74 iStartMillis = startInstant; 75 iEndMillis = endInstant; 76 } 77 78 85 protected BaseInterval(ReadableInstant start, ReadableInstant end) { 86 super(); 87 if (start == null && end == null) { 88 iStartMillis = iEndMillis = DateTimeUtils.currentTimeMillis(); 89 iChronology = ISOChronology.getInstance(); 90 } else { 91 iChronology = DateTimeUtils.getInstantChronology(start); 92 iStartMillis = DateTimeUtils.getInstantMillis(start); 93 iEndMillis = DateTimeUtils.getInstantMillis(end); 94 checkInterval(iStartMillis, iEndMillis); 95 } 96 } 97 98 106 protected BaseInterval(ReadableInstant start, ReadableDuration duration) { 107 super(); 108 iChronology = DateTimeUtils.getInstantChronology(start); 109 iStartMillis = DateTimeUtils.getInstantMillis(start); 110 long durationMillis = DateTimeUtils.getDurationMillis(duration); 111 iEndMillis = FieldUtils.safeAdd(iStartMillis, durationMillis); 112 checkInterval(iStartMillis, iEndMillis); 113 } 114 115 123 protected BaseInterval(ReadableDuration duration, ReadableInstant end) { 124 super(); 125 iChronology = DateTimeUtils.getInstantChronology(end); 126 iEndMillis = DateTimeUtils.getInstantMillis(end); 127 long durationMillis = DateTimeUtils.getDurationMillis(duration); 128 iStartMillis = FieldUtils.safeAdd(iEndMillis, -durationMillis); 129 checkInterval(iStartMillis, iEndMillis); 130 } 131 132 143 protected BaseInterval(ReadableInstant start, ReadablePeriod period) { 144 super(); 145 Chronology chrono = DateTimeUtils.getInstantChronology(start); 146 iChronology = chrono; 147 iStartMillis = DateTimeUtils.getInstantMillis(start); 148 if (period == null) { 149 iEndMillis = iStartMillis; 150 } else { 151 iEndMillis = chrono.add(period, iStartMillis, 1); 152 } 153 checkInterval(iStartMillis, iEndMillis); 154 } 155 156 167 protected BaseInterval(ReadablePeriod period, ReadableInstant end) { 168 super(); 169 Chronology chrono = DateTimeUtils.getInstantChronology(end); 170 iChronology = chrono; 171 iEndMillis = DateTimeUtils.getInstantMillis(end); 172 if (period == null) { 173 iStartMillis = iEndMillis; 174 } else { 175 iStartMillis = chrono.add(period, iEndMillis, -1); 176 } 177 checkInterval(iStartMillis, iEndMillis); 178 } 179 180 188 protected BaseInterval(Object interval, Chronology chrono) { 189 super(); 190 IntervalConverter converter = ConverterManager.getInstance().getIntervalConverter(interval); 191 if (converter.isReadableInterval(interval, chrono)) { 192 ReadableInterval input = (ReadableInterval) interval; 193 iChronology = (chrono != null ? chrono : input.getChronology()); 194 iStartMillis = input.getStartMillis(); 195 iEndMillis = input.getEndMillis(); 196 } else if (this instanceof ReadWritableInterval) { 197 converter.setInto((ReadWritableInterval) this, interval, chrono); 198 } else { 199 MutableInterval mi = new MutableInterval(); 200 converter.setInto(mi, interval, chrono); 201 iChronology = mi.getChronology(); 202 iStartMillis = mi.getStartMillis(); 203 iEndMillis = mi.getEndMillis(); 204 } 205 checkInterval(iStartMillis, iEndMillis); 206 } 207 208 214 public Chronology getChronology() { 215 return iChronology; 216 } 217 218 224 public long getStartMillis() { 225 return iStartMillis; 226 } 227 228 234 public long getEndMillis() { 235 return iEndMillis; 236 } 237 238 247 protected void setInterval(long startInstant, long endInstant, Chronology chrono) { 248 checkInterval(startInstant, endInstant); 249 iStartMillis = startInstant; 250 iEndMillis = endInstant; 251 iChronology = DateTimeUtils.getChronology(chrono); 252 } 253 254 } 255 | Popular Tags |