ELF>` @@ % Modified from Scryer prolog /** This library provides predicates for reasoning about time. */ :- module(time, [current_time/1, format_time//2 ]). :- use_module(library(format)). :- use_module(library(iso_ext)). :- use_module(library(error)). :- use_module(library(dcgs)). :- use_module(library(lists)). %% current_time(-T) % % Yields the current system time _T_ in an opaque form, called a % _time stamp_. Use `format_time//2` to describe strings that contain % attributes of the time stamp. current_time(T) :- posix_time(Epoch), posix_localtime(Epoch, TM), posix_strftime('[''Y''="%Y",m="%m",d="%d",''H''="%H",''M''="%M",''S''="%S",y="%y",b="%b",''B''="%B",a="%a",''A''="%A",w="%w",u="%u",''U''="%U",''W''="%W",j="%j",''D''="%D",x="%x",finis]', T0, TM), read_from_chars(T0, T). %% format_time(FormatString, TimeStamp)// % % The nonterminal format_time//2 describes a list of characters that % are formatted according to a format string. Usage: % % ``` % phrase(format_time(FormatString, TimeStamp), Cs) % ``` % % TimeStamp represents a moment in time in an opaque form, as for % example obtained by `current_time/1`. % % FormatString is a list of characters that are interpreted literally, % except for the following specifiers (and possibly more in the future): % % | `%Y` | year of the time stamp. Example: 2020. | % | `%m` | month number (01-12), zero-padded to 2 digits | % | `%d` | day number (01-31), zero-padded to 2 digits | % | `%H` | hour number (00-24), zero-padded to 2 digits | % | `%M` | minute number (00-59), zero-padded to 2 digits | % | `%S` | second number (00-60), zero-padded to 2 digits | % | `%b` | abbreviated month name, always 3 letters | % | `%a` | abbreviated weekday name, always 3 letters | % | `%A` | full weekday name | % | `%j` | day of the year (001-366), zero-padded to 3 digits | % | `%%` | the literal `%` | % % Example: % % ``` % ?- current_time(T), phrase(format_time("%d.%m.%Y (%H:%M:%S)", T), Cs). % T = [...], Cs = "11.06.2020 (00:24:32)". % ``` format_time([], _) --> []. format_time(['%','%'|Fs], T) --> !, "%", format_time(Fs, T). format_time(['%',Spec|Fs], T) --> !, ( { member(Spec=Value, T) } -> seq(Value) ; { domain_error(time_specifier, Spec, format_time//2) } ), format_time(Fs, T). format_time([F|Fs], T) --> [F], format_time(Fs, T). GCC: (OpenIndiana 14.3.0-oi-0) 14.3.0ñÿ  time.clibrary_time_pl_lenlibrary_time_pl.symtab.strtab.shstrtab.text.data.bss.comment@!@0 'p ,0p '˜ `  ø , $ 5