(root)/
glibc-2.38/
time/
test_time.c
       1  /* Copyright (C) 1991-2023 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(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  }