]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/seconds.c
libc, seconds: new time and date apis (try 2)
[plan9front.git] / sys / src / cmd / seconds.c
1 #include <u.h>
2 #include <libc.h>
3
4 /*
5  * seconds absolute_date ... - convert absolute_date to seconds since epoch
6  */
7 char *formats[] = {
8         /* asctime */
9         "W MMM DD hh:mm:ss ?Z YYYY",
10         /* RFC5322 */
11         "?W ?DD ?MMM ?YYYY hh:mm:ss ?Z",
12         "?W, DD-?MM-YY hh:mm:ss ?Z",
13         /* RFC822/RFC2822 */
14         "DD MMM YY hh:mm ZZZ",
15         "DD MMM YY hh:mm Z",
16         /* RFC850 */
17         "W, DD-MMM-YY hh:mm:ss MST",
18         /* RFC1123 */
19         "WW, DD MMM YYYY hh:mm:ss ZZZ",
20         /* RFC1123Z */
21         "WW, DD MMM YYYY hh:mm:ss ZZ",
22         /* RFC3339 */
23         "YYYY-MM-DD[T]hh:mm:ss[Z]ZZ",
24         "YYYY-MM-DD[T]hh:mm:ss[Z]Z",
25         "YYYY-MM-DD[T]hh:mm:ss ZZ",
26         "YYYY-MM-DD[T]hh:mm:ss Z",
27         /* RFC 3339 and human-readable variants */
28         "YYYY-MM-DD hh:mm:ss",
29         "YYYY-MM-DD hh:mm:ss ?Z",
30         "YYYY-MM-DD [@] hh:mm:ss",
31         "YYYY-MM-DD [@] hh:mm:ss ?Z",
32         nil
33 };
34
35 static void
36 usage(void)
37 {
38         fprint(2, "usage: %s date-time ...\n", argv0);
39         exits("usage");
40 }
41
42 void
43 main(int argc, char **argv)
44 {
45         Tm tm;
46         char **f, *fmt;
47         int i;
48
49         fmt = nil;
50         ARGBEGIN{
51         case 'f':
52                 fmt = EARGF(usage());
53                 break;
54         default:
55                 usage();
56         }ARGEND;
57
58         for(i = 0; i < argc; i++){
59                 if(fmt != nil){
60                         if(tmparse(&tm, fmt, argv[i], nil) != nil)
61                                 goto Found;
62                 }else{
63                         for(f = formats; *f != nil; f++)
64                                 if(tmparse(&tm, *f, argv[i], nil) != nil)
65                                         goto Found;
66                 }
67                 sysfatal("tmparse: %r");
68 Found:
69                 print("%lld\n", tm.abs);
70         }
71         exits(nil);
72 }