1 /* Copyright (c) 2000, 2004-2007 MySQL AB, 2009 Sun Microsystems, Inc.
2    Use is subject to license terms.
3 
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; version 2 of the License.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 
13    You should have received a copy of the GNU General Public License
14    along with this program; if not, write to the Free Software
15    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
16 
17 /* Get date in a printable form: yyyy-mm-dd hh:mm:ss */
18 
19 #include "mysys_priv.h"
20 #include <m_string.h>
21 
22 /*
23   get date as string
24 
25   SYNOPSIS
26     get_date()
27     to   - string where date will be written
28     flag - format of date:
29 	  If flag & GETDATE_TIME	Return date and time
30 	  If flag & GETDATE_SHORT_DATE	Return short date format YYMMDD
31 	  If flag & GETDATE_HHMMSSTIME	Return time in HHMMDD format.
32 	  If flag & GETDATE_GMT		Date/time in GMT
33 	  If flag & GETDATE_FIXEDLENGTH	Return fixed length date/time
34     date - for conversion
35 */
36 
37 
38 void get_date(register char * to, int flag, time_t date)
39 {
40    reg2 struct tm *start_time;
41    time_t skr;
42 #if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT)
43   struct tm tm_tmp;
44 #endif
45 
46    skr=date ? date : (time_t) my_time(0);
47 #if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT)
48    if (flag & GETDATE_GMT)
49      gmtime_r(&skr,&tm_tmp);
50    else
51      localtime_r(&skr,&tm_tmp);
52    start_time= &tm_tmp;
53 #else
54    if (flag & GETDATE_GMT)
55      start_time= gmtime(&skr);
56    else
57      start_time= localtime(&skr);
58 #endif
59    if (flag & GETDATE_SHORT_DATE)
60      sprintf(to,"%02d%02d%02d",
61 	     start_time->tm_year % 100,
62 	     start_time->tm_mon+1,
63 	     start_time->tm_mday);
64    else
65      sprintf(to, ((flag & GETDATE_FIXEDLENGTH) ?
66 		  "%4d-%02d-%02d" : "%d-%02d-%02d"),
67 	     start_time->tm_year+1900,
68 	     start_time->tm_mon+1,
69 	     start_time->tm_mday);
70    if (flag & GETDATE_DATE_TIME)
71      sprintf(strend(to),
72 	     ((flag & GETDATE_FIXEDLENGTH) ?
73 	      " %02d:%02d:%02d" : " %2d:%02d:%02d"),
74 	     start_time->tm_hour,
75 	     start_time->tm_min,
76 	     start_time->tm_sec);
77    else if (flag & GETDATE_HHMMSSTIME)
78      sprintf(strend(to),"%02d%02d%02d",
79 	     start_time->tm_hour,
80 	     start_time->tm_min,
81 	     start_time->tm_sec);
82 } /* get_date */
83