sys_wait
tempname
termios
+ time_rz
timer-time
timespec
tzset
#define AUTHORS proper_name ("David MacKenzie")
-static bool show_date (const char *format, struct timespec when);
+static bool show_date (const char *, struct timespec, timezone_t);
enum Time_spec
{
Return true if successful. */
static bool
-batch_convert (const char *input_filename, const char *format)
+batch_convert (const char *input_filename, const char *format, timezone_t tz)
{
bool ok;
FILE *in_stream;
}
else
{
- ok &= show_date (format, when);
+ ok &= show_date (format, when, tz);
}
}
}
}
+ timezone_t tz = tzalloc (getenv ("TZ"));
+
if (batch_file != NULL)
- ok = batch_convert (batch_file, format);
+ ok = batch_convert (batch_file, format, tz);
else
{
bool valid_date = true;
}
}
- ok &= show_date (format, when);
+ ok &= show_date (format, when, tz);
}
return ok ? EXIT_SUCCESS : EXIT_FAILURE;
in FORMAT, followed by a newline. Return true if successful. */
static bool
-show_date (const char *format, struct timespec when)
+show_date (const char *format, struct timespec when, timezone_t tz)
{
struct tm *tm;
if (format == rfc_2822_format)
setlocale (LC_TIME, "C");
- fprintftime (stdout, format, tm, 0, when.tv_nsec);
+ fprintftime (stdout, format, tm, tz, when.tv_nsec);
fputc ('\n', stdout);
if (format == rfc_2822_format)
setlocale (LC_TIME, "");
static size_t line_length;
+/* The local time zone rules, as per the TZ environment variable. */
+
+static timezone_t localtz;
+
/* If true, the file listing format requires that stat be called on
each file. */
obstack_init (&dev_ino_obstack);
}
+ localtz = tzalloc (getenv ("TZ"));
+
format_needs_stat = sort_type == sort_time || sort_type == sort_size
|| format == long_format
|| print_scontext
static size_t
align_nstrftime (char *buf, size_t size, char const *fmt, struct tm const *tm,
- int __utc, int __ns)
+ timezone_t tz, int ns)
{
const char *nfmt = fmt;
/* In the unlikely event that rpl_fmt below is not large enough,
strcpy (pfmt, pb + 2);
}
}
- size_t ret = nstrftime (buf, size, nfmt, tm, __utc, __ns);
+ size_t ret = nstrftime (buf, size, nfmt, tm, tz, ns);
return ret;
}
if (tm)
{
size_t len =
- align_nstrftime (buf, sizeof buf, long_time_format[0], tm, 0, 0);
+ align_nstrftime (buf, sizeof buf, long_time_format[0], tm,
+ localtz, 0);
if (len != 0)
width = mbsnwidth (buf, len, 0);
}
/* We assume here that all time zones are offset from UTC by a
whole number of seconds. */
s = align_nstrftime (p, TIME_STAMP_LEN_MAXIMUM + 1, fmt,
- when_local, 0, when_timespec.tv_nsec);
+ when_local, localtz, when_timespec.tv_nsec);
}
if (s || !*p)
(INT_STRLEN_BOUND (int) /* YYYY */
+ 1 /* because YYYY might equal INT_MAX + 1900 */
+ sizeof "-MM-DD HH:MM:SS.NNNNNNNNN +ZZZZ"))];
+ static timezone_t tz;
+ if (!tz)
+ tz = tzalloc (getenv ("TZ"));
struct tm const *tm = localtime (&t.tv_sec);
if (tm == NULL)
return timetostr (t.tv_sec, str);
- nstrftime (str, sizeof str, "%Y-%m-%d %H:%M:%S.%N %z", tm, 0, t.tv_nsec);
+ nstrftime (str, sizeof str, "%Y-%m-%d %H:%M:%S.%N %z", tm, tz, t.tv_nsec);
return str;
}