getdate(3) - wariua/manpages-ko GitHub Wiki
getdate, getdate_r - ๋ ์ง-์๊ฐ ๋ฌธ์์ด์ ๋ถํ ์๊ฐ์ผ๋ก ๋ณํํ๊ธฐ
#include <time.h>
struct tm *getdate(const char *string);
extern int getdate_err;
#include <time.h>
int getdate_r(const char *string, struct tm *res);
glibc ๊ธฐ๋ฅ ํ์ธ ๋งคํฌ๋ก ์๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):
-
getdate()
: _XOPEN_SOURCE >= 500
-
getdate_r()
: _GNU_SOURCE
getdate()
ํจ์๋ string
์ด ๊ฐ๋ฆฌํค๋ ๋ฒํผ์ ๋ด๊ธด ๋ ์ง ๋ฐ ์๊ฐ ๋ฌธ์์ด ํํ์ ๋ถํ ์๊ฐ์ผ๋ก ๋ณํํ๋ค. ๋ถํ ์๊ฐ์ tm
๊ตฌ์กฐ์ฒด์ ์ ์ฅํด์ ๊ทธ ๊ตฌ์กฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ํจ์ ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ค. ๊ทธ tm
๊ตฌ์กฐ์ฒด๋ ์ ์ ์ ์ฅ ๊ณต๊ฐ์ ํ ๋น๋ผ ์์ผ๋ฏ๋ก ์ด์ด์ getdate()
๋ฅผ ๋ ํธ์ถํ๋ฉด ๋ฎ์ด ์จ์ง๊ฒ ๋๋ค.
(format
์ธ์๊ฐ ์๋) strptime(3)๊ณผ ๋ฌ๋ฆฌ getdate()
์์๋ ํ์ผ์์ ์ป์ ํ์๋ค์ ์ฌ์ฉํ๋ค. ๊ทธ ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ช
์ ํ๊ฒฝ ๋ณ์ DATEMSK
๋ก ๋ฐ๋๋ค. ์ฃผ์ด์ง ์
๋ ฅ ๋ฌธ์์ด์ ๋ง๋ ํ์ผ ๋ด์ ์ฒซ ํ์ ๋ณํ์ ์ด๋ค.
๋ง๋์ง ํ์ธํ ๋ ๋์๋ฌธ์๋ฅผ ๋ฌด์ํ๋ค. ํจํด์ด๋ ๋ณํํ ๋ฌธ์์ด ๋ด์ ์์ฌ ๊ณต๋ฐฑ์ ๋ฌด์ํ๋ค.
strptime(3)์ ๋ณํ ์ง์ ํญ๋ชฉ๋ค์ด ํจํด์ ํฌํจ๋ ์ ์๋ค. POSIX.1-2001์๋ ๋ณํ ์ง์ ํญ๋ชฉ ํ ๊ฐ์ง๊ฐ ์ถ๊ฐ๋ก ๋ช ์ธ๋ผ ์๋ค.
%Z |
์๊ฐ๋ ์ด๋ฆ. glibc์๋ ๊ตฌํ๋ผ ์์ง ์์. |
%Z
๊ฐ ์์ผ๋ฉด ๋ถํ ์๊ฐ์ ๋ด๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฃผ์ด์ง ์๊ฐ๋์ ํ์ฌ ์๊ฐ์ ํด๋นํ๋ ๊ฐ๋ค๋ก ์ด๊ธฐํ ํ๋ค. ์๋๋ฉด ๊ตฌ์กฐ์ฒด๋ฅผ (localtime(3)์ ํธ์ถํ ๊ฒ์ฒ๋ผ) ํ์ฌ ์ง์ญ ์๊ฐ์ ํด๋นํ๋ ๋ถํ ์๊ฐ์ผ๋ก ์ด๊ธฐํ ํ๋ค.
์ฃผ ์ค ๋ ๋ฒํธ๋ง ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ๋ ์ ์ค๋์ด๋ ์ดํ์ ์ฒซ ํด๋น ๋ ๋ก ๋ฐ๋๋ค.
์๋ง ์๋ (๋ ์ ์๋) ๊ฒฝ์ฐ์๋ ๊ทธ ๋ฌ์ ๊ธ์์ด๋ ์ดํ์ ์ฒซ ํด๋น ๋ฌ๋ก ๋ฐ๋๋ค.
์๋ถ์ด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํ์ฌ ์๋ถ์ด๋ฅผ ์ด๋ค.
๋ ์ง๊ฐ ์์ง๋ง ์๊ฐ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์๊ฐ์ ํ์ฌ ์๊ฐ์ด๋ ์ดํ์ ์ฒซ ํด๋น ์๊ฐ์ผ๋ก ๋ฐ๋๋ค.
getdate_r()
์ getdate()
์ ์ฌ์ง์
๊ฐ๋ฅ ๋ฒ์ ์ ์ ๊ณตํ๋ GNU ํ์ฅ์ด๋ค. ์ ์ญ ๋ณ์๋ก ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๊ณ ์ ์ ๋ฒํผ๋ก ๋ถํ ์๊ฐ์ ๋ฐํํ๋ ๋์ ํจ์ ๋ฐํ ๊ฐ์ ํตํด ์ค๋ฅ๋ฅผ ๋ฐํํ๊ณ res
์ธ์๊ฐ ๊ฐ๋ฆฌํค๋ ํธ์ถ์ ํ ๋น ๋ฒํผ๋ก ๊ฒฐ๊ณผ ๋ถํ ์๊ฐ์ ๋ฐํํ๋ค.
์ฑ๊ณต ์ getdate()
๋ struct tm
์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค. ์๋๋ฉด NULL์ ๋ฐํํ๋ฉฐ ์ ์ญ ๋ณ์ getdate_err
๋ฅผ ์๋ ์๋ ์ค๋ฅ ๋ฒํธ๋ค ์ค ํ๋๋ก ์ค์ ํ๋ค. errno
๋ณํ์ ๋ํด์ ๋ช
์ธ๋ผ ์์ง ์๋ค.
์ฑ๊ณต ์ getdate_r()
์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ ์๋ ์๋ ์ค๋ฅ ๋ฒํธ๋ค ์ค ํ๋๋ฅผ ๋ฐํํ๋ค.
getdate_err
๋ฅผ ํตํด์ (getdate()
), ๋๋ ํจ์ ๊ฒฐ๊ณผ๋ฅผ ํตํด์ (getdate_r()
) ๋ค์ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ค.
1 |
DATEMSK ํ๊ฒฝ ๋ณ์๊ฐ ์ ์๋ผ ์์ง ์๊ฑฐ๋ ๊ทธ ๊ฐ์ด ๋น ๋ฌธ์์ด์ด๋ค. |
2 |
DATEMSK ์ ์ง์ ๋ ํ
ํ๋ฆฟ ํ์ผ์ ์ฝ๊ธฐ์ฉ์ผ๋ก ์ด ์ ์๋ค. |
3 | ํ์ผ ์ํ ์ ๋ณด๋ฅผ ์ป๋ ๋ฐ ์คํจํ๋ค. |
4 | ํ ํ๋ฆฟ ํ์ผ์ด ์ ๊ท ํ์ผ์ด ์๋๋ค. |
5 | ํ ํ๋ฆฟ ํ์ผ์ ์ฝ๋ ์ค ์ค๋ฅ๋ฅผ ๋ง๋ฌ๋ค. |
6 | ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์คํจํ๋ค. (๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถ์น ์๋ค.) |
7 | ์ ๋ ฅ์ ์ผ์นํ๋ ํ์ด ํ์ผ์ ์๋ค. |
8 | ์ ๋ ฅ ์ง์ ํญ๋ชฉ์ด ์ ํจํ์ง ์๋ค. |
DATEMSK
- ์์ ํจํด์ ๋ด์ ํ์ผ.
-
TZ
,LC_TIME
- strptime(3)์์ ์ฐ๋ ๋ณ์๋ค.
์ด ์ ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ ๋ํ ์ค๋ช ์ attributes(7)๋ฅผ ๋ณด๋ผ.
์ธํฐํ์ด์ค | ์์ฑ | ๊ฐ |
---|---|---|
getdate() |
์ค๋ ๋ ์์ ์ฑ | MT-Unsafe race:getdate env locale |
getdate_r() |
์ค๋ ๋ ์์ ์ฑ | MT-Safe env locale |
POSIX.1-2001, POSIX.1-2008.
POSIX.1์ strptime(3) ๋ช
์ธ์๋ %E
๋ฐ %O
์์์๋ฅผ ์ด์ฉํ ๋ณํ ์ง์ ํญ๋ชฉ์ด ์์ง๋ง getdate()
์๋ ๊ทธ๋ฐ ์ง์ ํญ๋ชฉ์ด ์๋ค. glibc์์๋ getptime(3)์ผ๋ก getdate()
๋ฅผ ๊ตฌํํ๊ณ ์์ผ๋ฉฐ, ๊ทธ๋์ ์์ชฝ์์ ์ ํํ ๊ฐ์ ๋ณํ๋ค์ ์ง์ํ๋ค.
์๋ ํ๋ก๊ทธ๋จ์์๋ ๋ช
๋ นํ ์ธ์ ๊ฐ๊ฐ์ ๋ํด getdate()
๋ฅผ ํธ์ถํ๊ณ ๊ฐ ํธ์ถ๋ง๋ค ๋ฐํ๋ tm
๊ตฌ์กฐ์ฒด์ ํ๋ ๊ฐ๋ค์ ํ์ํ๋ค. ๋ค์ ์
ธ ์ธ์
์ ํ๋ก๊ทธ๋จ ์ฌ์ฉ ๋ฐฉ์์ ๋ณด์ฌ ์ค๋ค.
$ TFILE=$PWD/tfile
$ echo '%A' > $TFILE # ์ฃผ ์ค ๋ ์ง ์ด๋ฆ
$ echo '%T' >> $TFILE # ISO ๋ ์ง (YYYY-MM-DD)
$ echo '%F' >> $TFILE # ์๊ฐ (HH:MM:SS)
$ date
$ export DATEMSK=$TFILE
$ ./a.out Tuesday '2009-12-28' '12:22:33'
Sun Sep 7 06:03:36 CEST 2008
Call 1 ("Tuesday") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 9
tm_mon = 8
tm_year = 108
tm_wday = 2
tm_yday = 252
tm_isdst = 1
Call 2 ("2009-12-28") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 28
tm_mon = 11
tm_year = 109
tm_wday = 1
tm_yday = 361
tm_isdst = 0
Call 3 ("12:22:33") succeeded:
tm_sec = 33
tm_min = 22
tm_hour = 12
tm_mday = 7
tm_mon = 8
tm_year = 108
tm_wday = 0
tm_yday = 250
tm_isdst = 1
#define _GNU_SOURCE
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
struct tm *tmp;
int j;
for (j = 1; j < argc; j++) {
tmp = getdate(argv[j]);
if (tmp == NULL) {
printf("Call %d failed; getdate_err = %d\n",
j, getdate_err);
continue;
}
printf("Call %d (\"%s\") succeeded:\n", j, argv[j]);
printf(" tm_sec = %d\n", tmp->tm_sec);
printf(" tm_min = %d\n", tmp->tm_min);
printf(" tm_hour = %d\n", tmp->tm_hour);
printf(" tm_mday = %d\n", tmp->tm_mday);
printf(" tm_mon = %d\n", tmp->tm_mon);
printf(" tm_year = %d\n", tmp->tm_year);
printf(" tm_wday = %d\n", tmp->tm_wday);
printf(" tm_yday = %d\n", tmp->tm_yday);
printf(" tm_isdst = %d\n", tmp->tm_isdst);
}
exit(EXIT_SUCCESS);
}
time(2), localtime(3), setlocale(3), strftime(3), strptime(3)
2019-03-06