]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/seconds.c
upas/fs: remove unused function date822tounix
[plan9front.git] / sys / src / cmd / seconds.c
1 #include <u.h>
2 #include <libc.h>
3
4 char *knownfmt[] = {
5         /* asctime */
6         "WW MMM DD hh:mm:ss ?Z YYYY",
7         /* RFC3339 */
8         "YYYY-MM-DD[T]hh:mm:ss[Z]?Z",
9         "YYYY-MM-DD[T]hh:mm:ss[Z]?Z",
10         "YYYY-MM-DD[T]hh:mm:ss ?Z",
11         "YYYY-MM-DD[T]hh:mm:ss?Z",
12         nil,
13 };
14
15 char *datefmt[] = {
16         /* RFC5322 */
17         "?W ?DD ?MMM ?YYYY",
18         "?W, DD-?MM-YY",
19         /* RFC822/RFC2822 */
20         "DD MMM YYYY",
21         "DD MMM YY",
22         /* RFC850 */
23         "WW, DD-MMM-YY",
24         /* RFC1123 */
25         "WWW, DD MMM YYYY",
26         /* RFC 3339 and human-readable variants */
27         "YYYY-MM-DD",
28         "YYYY-MM-DD [@] ",
29         /* random formats */
30         "?W ?MMM ?DD ?YYYY",
31         "?MMM ?DD ?YYYY",
32         "?DD ?MM ?YYYY",
33         "MMM ?DD ?YYYY",
34         "YYYY ?MM ?DD",
35         "YYYY ?DD ?MM",
36         "YYYY/MM?/DD?",
37         "MMM YYYY ?DD",
38         "?DD YYYY MMM",
39         "MM/DD/YYYY",
40         nil
41 };
42
43 char *timefmt[] = {
44         " hh:mm:ss",
45         " hh:mm",
46         " hh",
47         " hh:mm:ss ?A",
48         " hh:mm ?A",
49         " hh ?A",
50         "",
51         nil,
52 };
53
54 char *zonefmt[] = {
55         " ?Z",
56         "",
57         nil,
58 };
59
60
61 static void
62 usage(void)
63 {
64         fprint(2, "usage: %s [-f fmt] date-time/win m...\n", argv0);
65         exits("usage");
66 }
67
68 /*
69  * seconds absolute_date ... - convert absolute_date to seconds since epoch
70  */
71 void
72 main(int argc, char **argv)
73 {
74         char **f, **df, **tf, **zf, *fmt, *ep, buf[256];
75         Tzone *tz;
76         Tm tm;
77         int i;
78
79         fmt = nil;
80         ARGBEGIN{
81         case 'f':
82                 fmt = EARGF(usage());
83                 break;
84         default:
85                 usage();
86         }ARGEND;
87
88         if((tz = tzload("local")) == nil)
89                 sysfatal("bad local time: %r");
90         for(i = 0; i < argc; i++){
91                 if(fmt != nil){
92                         if(tmparse(&tm, fmt, argv[i], tz, &ep) != nil && *ep == 0)
93                                 goto Found;
94                 }else{
95                         for(f = knownfmt; *f != nil; f++)
96                                 if(tmparse(&tm, *f, argv[i], tz, &ep) != nil && *ep == 0)
97                                         goto Found;
98                         for(df = datefmt; *df; df++)
99                         for(tf = timefmt; *tf; tf++)
100                         for(zf = zonefmt; *zf; zf++){
101                                 snprint(buf, sizeof(buf), "%s%s%s", *df, *tf, *zf);
102                                 if(tmparse(&tm, buf, argv[i], tz, &ep) != nil && *ep == 0)
103                                         goto Found;
104                         }
105                 }
106                 if(*ep == 0)
107                         sysfatal("tmparse: %r");
108                 else
109                         sysfatal("tmparse: trailing junk");
110 Found:
111                 print("%lld\n", tmnorm(&tm));
112         }
113         exits(nil);
114 }