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
main(int argc,char ** argv)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(buf))
42 	    {
43 	      puts("putenv failed.");
44 	      lose = 1;
45 	    }
46 	  else
47 	    puts (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("mktime() failed?");
62 	  lose = 1;
63 	}
64       tp = localtime(&t);
65       if (tp == NULL)
66 	{
67 	  puts("localtime() failed.");
68 	  lose = 1;
69 	}
70       else if (strftime (buf, sizeof (buf), "%a %b %d %X %Z %Y", tp) == 0)
71 	{
72 	  puts("strftime() failed.");
73 	  lose = 1;
74 	}
75       else
76 	puts(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