mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-04 10:41:11 +02:00
29674: add $epochtime to datetime
This commit is contained in:
parent
7e27b4eee3
commit
8cbd510002
2 changed files with 61 additions and 2 deletions
|
@ -30,7 +30,8 @@ in seconds if tt(-r) is given) to var(scalar) instead of printing it.
|
||||||
)
|
)
|
||||||
enditem()
|
enditem()
|
||||||
|
|
||||||
The tt(zsh/datetime) module makes available several parameters:
|
The tt(zsh/datetime) module makes available several parameters;
|
||||||
|
all are readonly:
|
||||||
|
|
||||||
startitem()
|
startitem()
|
||||||
vindex(EPOCHREALTIME)
|
vindex(EPOCHREALTIME)
|
||||||
|
@ -45,5 +46,19 @@ vindex(EPOCHSECONDS)
|
||||||
item(tt(EPOCHSECONDS))(
|
item(tt(EPOCHSECONDS))(
|
||||||
An integer value representing the number of seconds since the
|
An integer value representing the number of seconds since the
|
||||||
epoch.
|
epoch.
|
||||||
|
)
|
||||||
|
vindex(epochtime)
|
||||||
|
item(tt(epochtime))(
|
||||||
|
An array value containing the number of seconds since the epoch
|
||||||
|
in the first element and the remainder of the time since the epoch
|
||||||
|
in nanoseconds in the second element. To ensure the two elements
|
||||||
|
are consistent the array should be copied or otherwise referenced
|
||||||
|
as a single substitution before the values are used. The following
|
||||||
|
idiom may be used:
|
||||||
|
|
||||||
|
example(for secs nsecs in $epochtime; do
|
||||||
|
...
|
||||||
|
done)
|
||||||
|
|
||||||
)
|
)
|
||||||
enditem()
|
enditem()
|
||||||
|
|
|
@ -173,6 +173,45 @@ getcurrentrealtime(UNUSED(Param pm))
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char **
|
||||||
|
getcurrenttime(UNUSED(Param pm))
|
||||||
|
{
|
||||||
|
char **arr;
|
||||||
|
char buf[DIGBUFSIZE];
|
||||||
|
|
||||||
|
#ifdef HAVE_CLOCK_GETTIME
|
||||||
|
struct timespec now;
|
||||||
|
|
||||||
|
if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
|
||||||
|
zwarn("EPOCHREALTIME: unable to retrieve time: %e", errno);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = (char **)zhalloc(3 * sizeof(*arr));
|
||||||
|
sprintf(buf, "%ld", (long)now.tv_sec);
|
||||||
|
arr[0] = dupstring(buf);
|
||||||
|
sprintf(buf, "%ld", now.tv_nsec);
|
||||||
|
arr[1] = dupstring(buf);
|
||||||
|
arr[2] = NULL;
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
#else
|
||||||
|
struct timeval now;
|
||||||
|
struct timezone dummy_tz;
|
||||||
|
|
||||||
|
gettimeofday(&now, &dummy_tz);
|
||||||
|
|
||||||
|
arr = (char **)zhalloc(3 * sizeof(*arr));
|
||||||
|
sprintf(buf, "%ld", (long)now.tv_sec);
|
||||||
|
arr[0] = dupstring(buf);
|
||||||
|
sprintf(buf, "%ld", (long)now.tv_usec * 1000);
|
||||||
|
arr[1] = dupstring(buf);
|
||||||
|
arr[2] = NULL;
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static struct builtin bintab[] = {
|
static struct builtin bintab[] = {
|
||||||
BUILTIN("strftime", 0, bin_strftime, 2, 2, 0, "qrs:", NULL),
|
BUILTIN("strftime", 0, bin_strftime, 2, 2, 0, "qrs:", NULL),
|
||||||
};
|
};
|
||||||
|
@ -183,11 +222,16 @@ static const struct gsu_integer epochseconds_gsu =
|
||||||
static const struct gsu_float epochrealtime_gsu =
|
static const struct gsu_float epochrealtime_gsu =
|
||||||
{ getcurrentrealtime, NULL, stdunsetfn };
|
{ getcurrentrealtime, NULL, stdunsetfn };
|
||||||
|
|
||||||
|
static const struct gsu_array epochtime_gsu =
|
||||||
|
{ getcurrenttime, NULL, stdunsetfn };
|
||||||
|
|
||||||
static struct paramdef patab[] = {
|
static struct paramdef patab[] = {
|
||||||
SPECIALPMDEF("EPOCHSECONDS", PM_INTEGER|PM_READONLY,
|
SPECIALPMDEF("EPOCHSECONDS", PM_INTEGER|PM_READONLY,
|
||||||
&epochseconds_gsu, NULL, NULL),
|
&epochseconds_gsu, NULL, NULL),
|
||||||
SPECIALPMDEF("EPOCHREALTIME", PM_FFLOAT|PM_READONLY,
|
SPECIALPMDEF("EPOCHREALTIME", PM_FFLOAT|PM_READONLY,
|
||||||
&epochrealtime_gsu, NULL, NULL)
|
&epochrealtime_gsu, NULL, NULL),
|
||||||
|
SPECIALPMDEF("epochtime", PM_ARRAY|PM_READONLY,
|
||||||
|
&epochtime_gsu, NULL, NULL)
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct features module_features = {
|
static struct features module_features = {
|
||||||
|
|
Loading…
Reference in a new issue