1 | /* Copyright (C) 1991-2022 Free Software Foundation, Inc. |
2 | This file is part of the GNU C Library. |
3 | |
4 | The GNU C Library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Lesser General Public |
6 | License as published by the Free Software Foundation; either |
7 | version 2.1 of the License, or (at your option) any later version. |
8 | |
9 | The GNU C Library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Lesser General Public License for more details. |
13 | |
14 | You should have received a copy of the GNU Lesser General Public |
15 | License along with the GNU C Library; if not, see |
16 | <https://www.gnu.org/licenses/>. */ |
17 | |
18 | #include <stdio.h> |
19 | #include <stdlib.h> |
20 | #include <time.h> |
21 | |
22 | |
23 | int |
24 | main (int argc, char **argv) |
25 | { |
26 | time_t t; |
27 | struct tm *tp; |
28 | struct tm tbuf; |
29 | int lose = 0; |
30 | |
31 | --argc; |
32 | ++argv; |
33 | |
34 | do |
35 | { |
36 | char buf[BUFSIZ]; |
37 | if (argc > 0) |
38 | { |
39 | static char buf[BUFSIZ]; |
40 | sprintf(buf, "TZ=%s" , *argv); |
41 | if (putenv(string: buf)) |
42 | { |
43 | puts(s: "putenv failed." ); |
44 | lose = 1; |
45 | } |
46 | else |
47 | puts (s: buf); |
48 | } |
49 | tzset(); |
50 | tbuf.tm_year = 72; |
51 | tbuf.tm_mon = 0; |
52 | tbuf.tm_mday = 31; |
53 | tbuf.tm_hour = 6; |
54 | tbuf.tm_min = 14; |
55 | tbuf.tm_sec = 50; |
56 | tbuf.tm_isdst = -1; |
57 | doit:; |
58 | t = mktime(&tbuf); |
59 | if (t == (time_t) -1) |
60 | { |
61 | puts(s: "mktime() failed?" ); |
62 | lose = 1; |
63 | } |
64 | tp = localtime(&t); |
65 | if (tp == NULL) |
66 | { |
67 | puts(s: "localtime() failed." ); |
68 | lose = 1; |
69 | } |
70 | else if (strftime (buf, sizeof (buf), "%a %b %d %X %Z %Y" , tp) == 0) |
71 | { |
72 | puts(s: "strftime() failed." ); |
73 | lose = 1; |
74 | } |
75 | else |
76 | puts(s: buf); |
77 | if (tbuf.tm_year == 101) |
78 | { |
79 | tbuf.tm_year = 97; |
80 | tbuf.tm_mon = 0; |
81 | goto doit; |
82 | } |
83 | ++argv; |
84 | } while (--argc > 0); |
85 | |
86 | { |
87 | #define SIZE 256 |
88 | char buffer[SIZE]; |
89 | time_t curtime; |
90 | struct tm *loctime; |
91 | |
92 | curtime = time (NULL); |
93 | |
94 | loctime = localtime (&curtime); |
95 | |
96 | fputs (asctime (loctime), stdout); |
97 | |
98 | strftime (buffer, SIZE, "Today is %A, %B %d.\n" , loctime); |
99 | fputs (buffer, stdout); |
100 | strftime (buffer, SIZE, "The time is %I:%M %p.\n" , loctime); |
101 | fputs (buffer, stdout); |
102 | |
103 | loctime->tm_year = 72; |
104 | loctime->tm_mon = 8; |
105 | loctime->tm_mday = 12; |
106 | loctime->tm_hour = 20; |
107 | loctime->tm_min = 49; |
108 | loctime->tm_sec = 05; |
109 | curtime = mktime (loctime); |
110 | strftime (buffer, SIZE, "%D %T was %w the %jth.\n" , loctime); |
111 | fputs (buffer, stdout); |
112 | } |
113 | |
114 | return (lose ? EXIT_FAILURE : EXIT_SUCCESS); |
115 | } |
116 | |