(⬑Table of Contents) (⬑Misc. Features Index)
s2 Time API
This API gets installed by s2sh as s2.time. Client
applications are free to install it (or not) under a different
name.
This object contains a few time-related functions. None of its members
require that this object be their this, so they can be copied for
use in other contexts:
This object provides the following features:
int sleep(integer seconds)
Works like C's sleep(3).
void mssleep(integer milliseconds)
Tries to sleep for the given number of milliseconds. Throws on error.
integer time()
Returns the current Unix Epoch time, as per C's time(3). If the
platform's cwal_int_t is too small for the value then a double is
returned instead of an integer (note that that can only happen on
32-bit builds and then might only work properly up to 48 bits of
integer time precision).
string strftime(string format
[, int unixTime = current time
[, useLocalTime=false]])
Formats Unix Epoch timestamps. The 3rd parameter determines whether the time value is treated as UTC (the default) or the local time zone. The full list of formatting options, and a code snippet for trying them out:
const formatList = {
'%%': 'Literal percent',
'%a': 'Abbr. weekday name',
'%A': 'Full weekday name',
'%b': 'Abbr. month name',
'%e': 'day of month, blank-padded',
'%h': 'Same as %b',
'%B': 'Full month name',
'%c': '??? "appropriate date/time representation"',
'%C': 'Century as two digits',
'%d': 'day of month, 01-31',
'%D': '%m/%d/%y',
'%E': 'ignored',
'%H': 'hour, 00-23',
'%I': 'hour, 01-12',
'%j': 'day of year, 001-366',
'%k': 'hour, 0-24, blank-padded',
'%l': 'hour, 1-12, blank-padded',
'%m': 'month, 01-12',
'%M': 'minute, 00-59',
'%n': '\\n', // only double-escaped for presentation purposes!
'%O': 'ignored',
'%p': '"am" or "pm"',
'%r': '%I:%M:%S %p',
'%R': '%H:%M',
'%S': 'seconds, 00-61',
'%t': '\\t', // only double-escaped for presentation purposes!
'%T': '%H:%M:%S',
'%u': 'ISO-8601 weeday as number 1-7, 1=Monday',
'%U': 'week of year, Sunday as first day',
'%v': 'dd-bbb-YYYY',
'%V': 'ISO-8601 week number',
'%w': 'weekday, 0-6, Sunday=0',
'%W': 'week of year, Monday as first day',
'%x': '??? "appropriate date representation"',
'%X': '??? "appropriate time representation"',
'%y': 'year, 00-99',
'%Y': 'year with century',
'%a, %d %b %Y %H:%M:%S +0000': 'RFC-822 (timezone/offset is hard-coded!)'
};
const now = s2.time.time(),
strftime = s2.time.strftime;
foreach(@formatList.propertyKeys().sort()=>k){
print("Format:",k,'\n\t',formatList[k],'\n\t ==>',strftime(k, now))
};
print('Current time UTC:',strftime('%Y-%m-%d %H:%M:%S', now));
print('Current local time:',strftime('%Y-%m-%d %H:%M:%S', now, true));
Sidebar: this implementation of
strftime()dates back to the early 1990s and contains several option descriptions which don't make all that much sense, e.g.%x.