| 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-1301 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 | |