[ Operating System | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# local_time(?Year, ?Month, ?Day, ?Hour, ?Minute, ?Second, ?DST, ?UnixTime)

Conversion between local time and universal time

Year
  Integer or variable
Month
  Integer or variable
Day
  Integer or variable
Hour
  Integer or variable
Minute
  Integer or variable
Second
  Integer or variable
DST
  0, 1 or variable (daylight savings time flag)
UnixTime
  Variable or integer (seconds since 1/1/1970)

## Description

This predicate is used to convert between local time (taking into account time zone and daylight savings time settings) and UTC (Universal Coordinated Time, represented as 'Unix time', i.e. in seconds since 1970-01-01, 00:00).

The conversion works in both directions. If the UnixTime argument is instantiated, it gets converted to the local date and time, and the first 6 arguments get unified accordingly.

If the first 6 (or 7) arguments are instantiated, they will be interpreted under the current time zone and daylight savings time rules, and converted into 'Unix time', which is unified with the last argument.

In both directions, the DST argument can usually remain uninstantiated, and will be unified with 1 if the date specified is while daylight savings time is in effect, and 0 otherwise. Note however, that during the switch from summer to winter time, there is usually a one hour overlap, where the same time of day exists twice, once in summer and once in winter time. In this case, when converting from local time to UTC, the caller should instantiate DST in order to disambiguate.

The predicate can also be used to test for valid local date and time: If the first 6 (or 7) arguments do not represent a valid date, the predicate fails.

This predicate is based on the POSIX localtime() and mktime() functions.

### Modes and Determinism

- local_time(+, +, +, +, +, +, ?, -) is semidet
- local_time(-, -, -, -, -, -, -, +) is det

### Fail Conditions

The first 7 arguments do not represent a valid date

### Exceptions

(4) instantiation fault
  The arguments are insufficiently instantiated
(5) type error
  Any of the arguments is not of the expected numerical type
(6) out of range
  UnixTime is out of range

## Examples

        ?- get_flag(unix_time,T), local_time(Yr,Mo,Dy,Hr,Mi,Sc,Ds,T).
        Yr = 2003
        Mo = 4
        Dy = 4
        Hr = 16
        Mi = 38
        Sc = 30
        Ds = 1
        T = 1049470710
        Yes (0.00s cpu)

        ?- local_time(2003,4,4,16,38,30,1,T).
        T = 1049470710
        Yes (0.00s cpu)

        ?- local_time(2003,4,4,16,38,30,_,T).
        T = 1049470710
        Yes (0.00s cpu)

        ?- local_time(2003,1,1,25,0,0,_,_).   % invalid hour
        No (0.00s cpu)

        ?- local_time(2003,2,29,12,0,0,_,_).  % invalid date (no leap year)
        No (0.00s cpu)

        % The following examples assume DST rules for Britain
        ?- local_time(2003,3,30,1,30,0,_,_).  % invalid time (skipped hour)
        No (0.00s cpu)

        ?- local_time(2003,10,26,1,0,0,1,T).  % 1h before end of summer time
        T = 1067126400
        Yes (0.01s cpu)

        ?- local_time(2003,10,26,1,0,0,0,T).  % 1 hour later
        T = 1067130000
        Yes (0.00s cpu)

## See Also

date / 1, local_time_string / 3, library(calendar)