12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others.
22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2007, International Business Machines Corporation and   *
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* others. All Rights Reserved.                                               *
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.duration;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.TimeZone;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Constructs a Period given a base time and a duration in milliseconds.
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <p>
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * PeriodBuilder may be used alone or be set on a DurationFormatter
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * to customize how that formatter constructs a Period for formatting.
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * <p>
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * None of the operations on PeriodBuilder change the current builder.
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic interface PeriodBuilder {
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  /**
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * Create a period of the given duration using the current system
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * time as the reference time.
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   *
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * @param duration the duration in milliseconds from the current time
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * to the target time.  A negative duration indicates a time in the past
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * @return a Period that represents the duration
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   */
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  Period create(long duration);
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  /**
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * Create a period of the given duration using the provided reference date.
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   *
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * @param duration the duration in milliseconds from the referenct time
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * to the target time.  A negative duration indicates a time before the
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * reference time
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * @param referenceDate the reference date from which to compute the period
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * @return a Period that represents the duration
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   */
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  Period createWithReferenceDate(long duration, long referenceDate);
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  /**
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * Returns a new PeriodBuilder that uses the provided locale to
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * determine what periods are available for use.
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   */
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  PeriodBuilder withLocale(String localeName);
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  /**
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * Returns a new PeriodBuilder that computes periods starting at
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   * dates in the provided time zone.
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   */
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert  PeriodBuilder withTimeZone(TimeZone tz);
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
56