/*
******************************************************************************
* Copyright (C) 2007, International Business Machines Corporation and   *
* others. All Rights Reserved.                                               *
******************************************************************************
*/

package com.ibm.icu.impl.duration;

import java.util.Date;
import java.util.TimeZone;

/**
 * Formatter for durations in milliseconds.
 */
public interface DurationFormatter {

  /**
   * Formats the duration between now and a target date.
   * <p>
   * This is a convenience method that calls
   * formatDurationFrom(long, long) using now
   * as the reference date, and the difference between now and
   * <code>targetDate.getTime()</code> as the duration.
   * 
   * @param targetDate the ending date
   * @return the formatted time
   */
  String formatDurationFromNowTo(Date targetDate);

  /**
   * Formats a duration expressed in milliseconds.
   * <p>
   * This is a convenience method that calls formatDurationFrom
   * using the current system time as the reference date.
   * 
   * @param duration the duration in milliseconds
   * @param tz the time zone
   * @return the formatted time
   */
  String formatDurationFromNow(long duration);

  /**
   * Formats a duration expressed in milliseconds from a reference date.
   * <p>
   * The reference date allows formatters to use actual durations of
   * variable-length periods (like months) if they wish.
   * <p>
   * The duration is expressed as the number of milliseconds in the
   * past (negative values) or future (positive values) with respect
   * to a reference date (expressed as milliseconds in epoch).
   * 
   * @param duration the duration in milliseconds
   * @param referenceDate the date from which to compute the duration
   * @return the formatted time
   */
  String formatDurationFrom(long duration, long referenceDate);

  /**
   * Returns a new DurationFormatter that's the same as this one 
   * but formats for a new locale.
   *
   * @param localeName the name of the new locale
   * @return a new formatter for the given locale
   */
  DurationFormatter withLocale(String localeName);

  /**
   * Returns a new DurationFormatter that's the same as this one but
   * uses a different time zone.
   *
   * @param tz the time zone in which to compute durations.
   * @return a new formatter for the given locale
   */
  DurationFormatter withTimeZone(TimeZone tz);
}
