ํ์ํ err ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ !



#include <stdio.h>
#include <time.h>
#include <locale.h>
int main(void)
{
// ํ๊ตญ์ด ์์ผ ๋ฐ ์ง์ญ ํ์ ์ถ๋ ฅ์ ์ํด ๋ก์บ ์ค์
setlocale(LC_TIME, "ko_KR.UTF-8");
time_t t; // ํ์ฌ ์๊ฐ์ ์ ์ฅํ ๋ณ์
struct tm *tm_info; // ์ง์ญ ์๊ฐ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
char buf[100]; // ํฌ๋งท ๋ฌธ์์ด ์ ์ฅ ๋ฒํผ
// 1. ํ์ฌ ์๊ฐ(์ด ๋จ์, UTC ๊ธฐ์ค) ๊ฐ์ ธ์ค๊ธฐ
time(&t);
// 2. ์ง์ญ ์๊ฐ๋(KST ๋ฑ)์ ๋ง๊ฒ ๋ณํ
tm_info = localtime(&t);
// 3. ์ํ๋ ํ์์ผ๋ก ๋ฌธ์์ด ์์ฑ
// %Y: ์ฐ๋ 4์๋ฆฌ, %m: ์, %d: ์ผ
// %a: ์์ผ(ํ), %p: ์ค์ /์คํ, %H:%M:%S: ์:๋ถ:์ด
// %Z: ์๊ฐ๋(KST)
strftime(buf, sizeof(buf), "%Y. %m. %d. (%a) %H:%M:%S %Z", tm_info);
// 4. ์ถ๋ ฅ
printf("%s\n", buf);
return 0;
}
์ฌ์ง์ฒ๋ผ date ๋ช
๋ น์ ์คํํ์ ๋ “2025. 10. 14. (ํ) 10:40:28 KST” ์ฒ๋ผ ์ถ๋ ฅ๋๋๋ก ํ๋ C ํ๋ก๊ทธ๋จ์
์์คํ
์๊ฐ(time()), ์ง์ญ ์๊ฐ(localtime()), ํฌ๋งท(strftime()) ์ ์กฐํฉํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
๐ง ์ฝ๋ ์ค๋ช
| setlocale(LC_TIME, "ko_KR.UTF-8"); | ๋ก์บ(locale) ์ค์ | ์์ผ์ด๋ ์ ์ด๋ฆ์ด ํ๊ธ๋ก ๋์ค๊ฒ ํจ. (์์คํ ์ ko_KR.UTF-8์ด ์ค์น๋์ด ์์ด์ผ ํจ) |
| time(&t); | ํ์ฌ ์๊ฐ ํ๋ | UTC ๊ธฐ์ค ์ด ๋จ์ ์๊ฐ์ time_t์ ์ ์ฅ |
| localtime(&t); | ์ง์ญ ์๊ฐ์ผ๋ก ๋ณํ | UTC → KST(ํ๊ตญ ํ์ค์) |
| strftime() | ํฌ๋งท ๋ฌธ์์ด ์์ฑ | ์ํ๋ ํ์(%Y.%m.%d.(%a) %H:%M:%S %Z)์ผ๋ก ๋ณํ |
| printf("%s\n", buf); | ์ต์ข ์ถ๋ ฅ | ๋ณํ๋ ๋ ์ง ๋ฌธ์์ด์ ํ๋ฉด์ ์ถ๋ ฅ |
๐ก ์ถ๋ ฅ ์์
$ gcc -o mydate date.c
$ ./mydate
2025. 10. 14. (ํ) 10:40:28 KST
โ๏ธ ์ฃผ์ ํฌ๋งท ์ง์ ์ ์ ๋ฆฌ (strftime())
| %Y | ์ฐ๋ (4์๋ฆฌ) | 2025 |
| %m | ์ (01–12) | 10 |
| %d | ์ผ (01–31) | 14 |
| %a | ์์ผ ์ฝ์ด (locale ๊ธฐ๋ฐ) | ํ |
| %H | ์ (00–23) | 10 |
| %M | ๋ถ (00–59) | 40 |
| %S | ์ด (00–59) | 28 |
| %Z | ์๊ฐ๋ | KST |
์๋ฌ ์ฒ๋ฆฌ
์ข์์ ๐ ์๋ฒฝํ๊ฒ ํ๋ ค๋ฉด, ์๊ฐ ํจ์๊ฐ ์คํจํ์ ๋์ ์๋ฌ ์ฒ๋ฆฌ๋ ์ถ๊ฐํด์ฃผ๋ ๊ฒ ์ข์ต๋๋ค.
(์คํจ ํ๋ฅ ์ ๋ฎ์ง๋ง, time() / localtime() / strftime()์ด NULL์ ๋ฐํํ ์ ์์ผ๋๊น์.)
โ ๊ฐ์ ๋ ์ฝ๋ — ์๋ฌ ์ฒ๋ฆฌ ํฌํจ ๋ฒ์ (date_safe.c)
#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <stdlib.h>
int main(void)
{
// 1๏ธโฃ ํ๊ตญ์ด ๋ก์บ ์ค์ (์์ผ์ด "(ํ)"์ฒ๋ผ ์ถ๋ ฅ๋๋๋ก)
if (setlocale(LC_TIME, "ko_KR.UTF-8") == NULL) {
fprintf(stderr, "โ ๏ธ Warning: Cannot set locale to ko_KR.UTF-8. Default locale will be used.\n");
}
// 2๏ธโฃ ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
time_t t = time(NULL);
if (t == ((time_t)-1)) {
perror("โ time() failed");
return EXIT_FAILURE;
}
// 3๏ธโฃ ์ง์ญ ์๊ฐ ๊ตฌ์กฐ์ฒด๋ก ๋ณํ
struct tm *tm_info = localtime(&t);
if (tm_info == NULL) {
perror("โ localtime() failed");
return EXIT_FAILURE;
}
// 4๏ธโฃ ํฌ๋งทํ
๋ ๋ฌธ์์ด๋ก ๋ณํ
char buf[100];
if (strftime(buf, sizeof(buf), "%Y. %m. %d. (%a) %H:%M:%S %Z", tm_info) == 0) {
fprintf(stderr, "โ strftime() failed: buffer too small or formatting error.\n");
return EXIT_FAILURE;
}
// 5๏ธโฃ ์ต์ข
์ถ๋ ฅ
printf("%s\n", buf);
return EXIT_SUCCESS;
}
๐ง ์ฝ๋ ์ค๋ช (์๋ฌ ์ฒ๋ฆฌ ์ค์ฌ)
| 1 | setlocale() | ํด๋น ๋ก์บ์ด ์ค์น๋์ง ์์์ ๊ฒฝ์ฐ NULL ๋ฐํ → ๊ฒฝ๊ณ ๋ฉ์์ง ์ถ๋ ฅ ํ ๊ณ์ ์คํ |
| 2 | time() | ํ์ฌ ์๊ฐ์ ๊ตฌํ์ง ๋ชปํ๋ฉด -1 ๋ฐํ → perror()๋ก ์ค๋ฅ ์ค๋ช ์ถ๋ ฅ ํ ์ข ๋ฃ |
| 3 | localtime() | ๋ณํ ์คํจ ์ NULL ๋ฐํ → perror()๋ก ์ค๋ฅ ์ค๋ช ํ ์ข ๋ฃ |
| 4 | strftime() | ๋ฒํผ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ํฌ๋งท ์คํจ ์ 0 ๋ฐํ → ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ ํ ์ข ๋ฃ |
| 5 | printf() | ์ ์ ์ถ๋ ฅ (์ด ๋จ๊ณ์์ ์ผ๋ฐ์ ์ผ๋ก ์คํจํ์ง ์์) |
๐ป ์คํ ์์
$ gcc -Wall -Wextra -O2 -o mydate date_safe.c
$ ./mydate
2025. 10. 14. (ํ) 10:40:28 KST
์์ฉ
ChatGPT์ ๋ง:
์์ฃผ ์ข์์ ๐
์ง๊ธ ๋ง๋ ํ๋ก๊ทธ๋จ์ ํ๊ตญ ํ์ค์(KST) ์
"%Y. %m. %d. (%a) %H:%M:%S %Z" ํ์์ ์ฌ์ฉํ์ง๋ง,
์ํ๋ค๋ฉด ๋ค๋ฅธ ์ง์ญ ์๊ฐ๋๋ ๋ค๋ฅธ ํ์(format) ์ผ๋ก ์ผ๋ง๋ ์ง ๋ฐ๊ฟ ์ ์์ด์.
๐ 1๏ธโฃ ๋ค๋ฅธ ์ง์ญ ์๊ฐ๋๋ก ์ถ๋ ฅํ๊ธฐ
C ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๊ฐ๋๋ ํ๊ฒฝ ๋ณ์ TZ ๋ก ๋ฐ๊ฟ์.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
time_t t = time(NULL);
struct tm *tm_info;
// ๐น ์: ๋ฏธ๊ตญ ๋ด์(EST) ์๊ฐ๋๋ก ์ค์
setenv("TZ", "America/New_York", 1);
tzset(); // ๋ฐ๋์ ํธ์ถํด์ผ TZ ์ ์ฉ๋จ
tm_info = localtime(&t);
char buf[100];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm_info);
printf("๐ฝ New York Time: %s\n", buf);
// ๐น ๋ฐ๋(UTC)
setenv("TZ", "Europe/London", 1);
tzset();
tm_info = localtime(&t);
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm_info);
printf("๐ฌ๐ง London Time : %s\n", buf);
// ๐น ๋์ฟ(Japan)
setenv("TZ", "Asia/Tokyo", 1);
tzset();
tm_info = localtime(&t);
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm_info);
printf("๐ฏ๐ต Tokyo Time : %s\n", buf);
return 0;
}
๐ฌ ์คํ ๊ฒฐ๊ณผ ์์
(์ค์ ์์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง)
๐ฝ New York Time: 2025-10-14 09:40:28 EDT
๐ฌ๐ง London Time : 2025-10-14 14:40:28 BST
๐ฏ๐ต Tokyo Time : 2025-10-14 22:40:28 JST
๐ ํต์ฌ ํฌ์ธํธ
- setenv("TZ", "์ง์ญ/๋์", 1); ๋ก ์๊ฐ๋๋ฅผ ์ค์
- tzset(); ํธ์ถ๋ก ์ฆ์ ๋ฐ์
- "Asia/Seoul", "Europe/Paris", "America/Los_Angeles" ๋ฑ ์ฌ์ฉ ๊ฐ๋ฅ
- /usr/share/zoneinfo ๊ฒฝ๋ก์ ์ค์ ๊ฐ๋ฅํ ์๊ฐ๋ ๋ชฉ๋ก์ด ์์ด์.
๐งญ 2๏ธโฃ ๋ค๋ฅธ ์ถ๋ ฅ ํ์(format) ์ง์ ํ๊ธฐ
strftime()์ ํฌ๋งท ๋ฌธ์์ด์ ์์ ๋กญ๊ฒ ์กฐํฉํ ์ ์์ด์.
์๋๋ ์์ฃผ ์ฐ๋ ์์๋ค์ด์์ ๐
| "%Y-%m-%d %H:%M:%S" | 2025-10-14 10:40:28 | ์ผ๋ฐ์ ์ธ ๋ ์ง/์๊ฐ ํ์ |
| "%A, %B %d, %Y" | Tuesday, October 14, 2025 | ์์ด ๊ธด ํ์ |
| "%m/%d/%Y %I:%M:%S %p" | 10/14/2025 10:40:28 AM | ๋ฏธ๊ตญ์ 12์๊ฐ์ |
| "%d-%b-%Y (%a)" | 14-Oct-2025 (Tue) | ์งง์ ์์ผ/์ ์ด๋ฆ |
| "%H์ %M๋ถ %S์ด" | 10์ 40๋ถ 28์ด | ํ๊ตญ์ ํ๊ธฐ |
| "%c" | Tue Oct 14 10:40:28 2025 | ์์คํ ๊ธฐ๋ณธ ํ์ |
| "%x %X" | 2025-10-14 10:40:28 | ์ง์ญ๋ณ ๋ ์ง์ ์๊ฐ |
| "%Y๋ %m์ %d์ผ (%a) %p %I์ %M๋ถ %S์ด" | 2025๋ 10์ 14์ผ (ํ) ์ค์ 10์ 40๋ถ 28์ด | ์์ ํ๊ตญ์ ํฌ๋งท |
๐งช 3๏ธโฃ ์์ — ๋ค์ํ ํฌ๋งท ํ ๋ฒ์ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
#include <time.h>
#include <locale.h>
int main(void)
{
setlocale(LC_TIME, "ko_KR.UTF-8");
time_t t = time(NULL);
struct tm *tm_info = localtime(&t);
char buf[100];
strftime(buf, sizeof(buf), "%Y๋
%m์ %d์ผ (%a) %p %I์ %M๋ถ %S์ด", tm_info);
printf("ํ๊ตญ์: %s\n", buf);
strftime(buf, sizeof(buf), "%A, %B %d, %Y %I:%M:%S %p", tm_info);
printf("์๋ฌธ์: %s\n", buf);
strftime(buf, sizeof(buf), "%c", tm_info);
printf("๊ธฐ๋ณธํ: %s\n", buf);
return 0;
}
๐งฉ ์ ๋ฆฌ
| ๋ค๋ฅธ ์๊ฐ๋ ์ถ๋ ฅ | setenv("TZ", "Asia/Tokyo", 1); tzset(); | ๋์ฟ ์๊ฐ ์ถ๋ ฅ |
| ์๊ฐ ํ์ ๋ฐ๊พธ๊ธฐ | strftime(buf, sizeof(buf), "ํ์", tm_info); | "%Y-%m-%d %H:%M:%S" ๋ฑ |
| ํ๊ตญ์ด ์์ผ ์ถ๋ ฅ | setlocale(LC_TIME, "ko_KR.UTF-8"); | (ํ) ํ์์ผ๋ก ํ์ |
| UTC ์ถ๋ ฅ | gmtime() ์ฌ์ฉ | ์ธ๊ณ ํ์ค์๋ก ํ์ |
'6. CS ๊ธฐ์ด ๐ > Linux & Unix ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Linux/Unix] Cํ์ผ ์คํ (0) | 2025.10.21 |
|---|---|
| [Linux/Unix] shํ์ผ ์คํ (0) | 2025.10.21 |
| [Linux/Unix][7-1] sysocnf(3) ํจ์ ํ์ฉ (0) | 2025.10.21 |
| [Linux/Unix][6-3] ํฉ&ํ๊ท ์ถ๋ ฅ ํ๋ก๊ทธ๋จ (0) | 2025.10.21 |
| [Linux/Unix][6-2] $ ./2 test.txt test.bak (0) | 2025.10.21 |