You are currently viewing a snapshot of www.mozilla.org taken on April 21, 2008. Most of this content is highly out of date (some pages haven't been updated since the project began in 1998) and exists for historical purposes only. If there are any pages on this archive site that you think should be added back to www.mozilla.org, please file a bug.



Date and Time Formatting

Description

The Date and Time formatting functions are intended to provide a set of simple, cross platform functions that Mozilla developers can use to perform locale sensitive date and time formatting operations.

The caller first need to instanciate nsILocale.
FormatTime performs a locale sensitive date formatting operation on the time_t parameter. The formatted string is returned in nsString. The date/time string is formatted according to conventions of the given locale and the given selectors.
FormatTMTime performs a locale sensitive date formatting operation on the struct tm parameter. The formatted string is returned in nsString. The date/time string is formatted according to conventions of the given locale and the given selectors.

API

typedef enum {
  kDateFormatNone,                // do not include the date in the format string
  kDateFormatLong,                // provides the long date format for the given locale
  kDateFormatShort,               // provides the short date format for the given locale
  kDateFormatYearMonth,           // formats using only the year and month
  kDateFormatWeekday              // week day (e.g. Mon, Tue)
} nsDateFormatSelector;

typedef enum {
  kTimeFormatNone,                // don't include the time in the format string
  kTimeFormatSeconds,             // provides the time format with seconds in the given locale
  kTimeFormatNoSeconds,           // provides the time format without seconds in the given locale
  kTimeFormatSecondsForce24Hour,  // forces the time format to use the 24 clock, regardless of the locale conventions
  kTimeFormatNoSecondsForce24Hour // forces the time format to use the 24 clock, regardless of the locale conventions
} nsTimeFormatSelector;


// Create a date/time format interface for an input locale.
//

class nsIDateTimeFormat : public nsISupports {

public:

  // performs a locale sensitive date formatting operation on the time_t parameter
  NS_IMETHOD FormatTime(nsILocale* locale,
            const nsDateFormatSelector dateFormatSelector,
            const nsTimeFormatSelector timeFormatSelector,
            const time_t timetTime,
            nsString& stringOut) = 0;

  // performs a locale sensitive date formatting operation on the struct tm parameter
  NS_IMETHOD FormatTMTime(nsILocale* locale,
             const nsDateFormatSelector dateFormatSelector,
             const nsTimeFormatSelector timeFormatSelector,
             const struct tm* tmTime,
             nsString& stringOut) = 0;

  // performs a locale sensitive date formatting operation on the PRTime parameter
  NS_IMETHOD FormatPRTime(nsILocale* locale,
             const nsDateFormatSelector dateFormatSelector,
             const nsTimeFormatSelector timeFormatSelector,
             const PRTime prTime,
             nsString& stringOut) = 0;

  // performs a locale sensitive date formatting operation on the PRExplodedTime parameter
  NS_IMETHOD FormatPRExplodedTime(nsILocale* locale,
                 const nsDateFormatSelector dateFormatSelector,
                 const nsTimeFormatSelector timeFormatSelector,
                 const PRExplodedTime* explodedTime,
                 nsString& stringOut) = 0;
};

Example

Following example format a current time by using both FormatTime and FormatTMTime. Details omitted.

 nsAutoString dateString;
 time_t timetTime;
 // create a nsILocale by nsILocaleService
 
 // create an instance
 res = nsComponentManager::CreateInstance(kDateTimeFormatCID,
       NULL, nsIDateTimeFormat::GetIID(), (void**) &inst);

 // get a current time
 time(&timetTime);

 // format by using FormatTime
 res = inst->FormatTime(locale, kDateFormatShort, kTimeFormatSeconds,
       timetTime, dateString);

 // format by using FormatTMTime
 res = inst->FormatTMTime(locale, kDateFormatWeekday, kTimeFormatNoSecondsForce24Hour,
       localtime(&ltime), dateString);

 NS_RELEASE(inst);

Undecided (or unimplemented) issues

Input string is specifed as nsStrings, this may change (to whatever appropriate for XPIDL) => new scriptable interface is available nsIScriptableDateFormat