the month and three days are up for -hackers and the 24hrs for -committers.

add a -j flag that tells date not to try to set the date.  This allows you
to use date as a userland interface to strptime.

example:
TZ=GMT date -j -f "%a, %d %b %Y %T %Z" "Sun, 08 Nov 1998 02:22:20 GMT" +%s

which is the standard format for Last-modified headers in HTTP requests.

only one to respond: eivind
This commit is contained in:
John-Mark Gurney 1999-05-14 00:28:41 +00:00
parent fb212aff15
commit 3bc1b1bb27
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=47129
2 changed files with 34 additions and 20 deletions

View File

@ -33,7 +33,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)date.1 8.3 (Berkeley) 4/28/95
.\" $Id: date.1,v 1.27 1999/03/09 09:38:53 brian Exp $
.\" $Id: date.1,v 1.28 1999/05/08 10:19:59 kris Exp $
.\"
.Dd November 17, 1993
.Dt DATE 1
@ -43,7 +43,7 @@
.Nd display or set date and time
.Sh SYNOPSIS
.Nm date
.Op Fl nu
.Op Fl jnu
.Op Fl d Ar dst
.Op Fl r Ar seconds
.Op Fl t Ar minutes_west
@ -77,6 +77,12 @@ the default
.Ar [[[[yy]mm]dd]HH]MM[.ss]
format. Parsing is done using
.Xr strptime 3 .
.It Fl j
Do not try to set the date. This allows you to use the
.Fl f
flag in addition to the
.Cm +
option to convert one date format to another.
.It Fl n
The utility
.Xr timed 8

View File

@ -42,7 +42,7 @@ static char const copyright[] =
static char sccsid[] = "@(#)date.c 8.2 (Berkeley) 4/28/95";
#endif
static const char rcsid[] =
"$Id: date.c,v 1.26 1998/10/03 16:29:59 alex Exp $";
"$Id: date.c,v 1.27 1999/03/09 09:38:54 brian Exp $";
#endif /* not lint */
#include <sys/param.h>
@ -61,9 +61,9 @@ static const char rcsid[] =
#include "vary.h"
time_t tval;
int retval, nflag;
int retval;
static void setthetime __P((const char *, const char *));
static void setthetime __P((const char *, const char *, int, int));
static void badformat __P((void));
static void usage __P((void));
@ -78,6 +78,7 @@ main(argc, argv)
extern char *optarg;
struct timezone tz;
int ch, rflag;
int jflag, nflag;
char *format, buf[1024];
char *endptr, *fmt;
int set_timezone;
@ -90,8 +91,9 @@ main(argc, argv)
(void) setlocale(LC_TIME, "");
tz.tz_dsttime = tz.tz_minuteswest = 0;
rflag = 0;
jflag = nflag = 0;
set_timezone = 0;
while ((ch = getopt(argc, argv, "d:f:nr:t:uv:")) != -1)
while ((ch = getopt(argc, argv, "d:f:jnr:t:uv:")) != -1)
switch((char)ch) {
case 'd': /* daylight savings time */
tz.tz_dsttime = strtol(optarg, &endptr, 10) ? 1 : 0;
@ -102,6 +104,9 @@ main(argc, argv)
case 'f':
fmt = optarg;
break;
case 'j':
jflag = 1; /* don't set time */
break;
case 'n': /* don't set network */
nflag = 1;
break;
@ -147,7 +152,7 @@ main(argc, argv)
}
if (*argv) {
setthetime(fmt, *argv);
setthetime(fmt, *argv, jflag, nflag);
++argv;
} else if (fmt != NULL)
usage();
@ -171,9 +176,10 @@ main(argc, argv)
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
void
setthetime(fmt, p)
setthetime(fmt, p, jflag, nflag)
const char *fmt;
register const char *p;
int jflag, nflag;
{
register struct tm *lt;
struct timeval tv;
@ -251,19 +257,21 @@ setthetime(fmt, p)
if ((tval = mktime(lt)) == -1)
errx(1, "nonexistent time");
/* set the time */
if (nflag || netsettime(tval)) {
logwtmp("|", "date", "");
tv.tv_sec = tval;
tv.tv_usec = 0;
if (settimeofday(&tv, (struct timezone *)NULL))
err(1, "settimeofday (timeval)");
logwtmp("{", "date", "");
}
if (!jflag) {
/* set the time */
if (nflag || netsettime(tval)) {
logwtmp("|", "date", "");
tv.tv_sec = tval;
tv.tv_usec = 0;
if (settimeofday(&tv, (struct timezone *)NULL))
err(1, "settimeofday (timeval)");
logwtmp("{", "date", "");
}
if ((p = getlogin()) == NULL)
p = "???";
syslog(LOG_AUTH | LOG_NOTICE, "date set by %s", p);
if ((p = getlogin()) == NULL)
p = "???";
syslog(LOG_AUTH | LOG_NOTICE, "date set by %s", p);
}
}
static void