일단 시간관련 함수를 사용하기 위해 time.h 라이브러리를 불러와줍니다
#include <stdio.h>
#include <time.h> //이곳입니다
int main(){
}
time.h 라이브러리에 있는 함수를 이용할것인데요
time_t 와 localtime() 함수를 이용해야합니다
#include <stdio.h>
#include <time.h>
int main(){
time_t t=time(NULL);
struct tm tm = *localtime(&t);
}
time_t 형태의 변수 t를 struct tm 구조체 값으로 변환하고localtime 함수는 구조체 포인터 값을 반환하기 떄문에struct tm tm =*localtime(&t)형태로 선언합니다.
struct tm {
int tm_sec; // 초
int tm_min; // 분
int tm_hour; // 시
int tm_mday; // 일
int tm_mon; // 월
int tm_year; // 년 ※1900년 부터의 년입니다.
int tm_wday; // 요일
int tm_yday; // 1년중 경과일 0~365
int tm_isdst; //
};
struct 구조체의 내용은 다음과 같습니다
예제 입력후에 결과값 받아보겠습니다
1. 년 월 일 시 분 초 입력받기
여기서 년은 +1900
월은 +1해야 현재 시간을 받아볼수있습니다.
이유는 년도는 1900년 이후 시간을 표시해주고
월은 구조체 안에 -1값으로 저장되어있기때문에
이점만 유의해서 출력하면됩니다!
#include<stdio.h>
#include<time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("%d %d %d %d %d %d", tm.tm_year + 1900, // 년도 1900년 이후 +1900
,tm.tm_mon +1 // 월은 -1값 임으로 +1
, tm.tm_mday // 일
, tm.tm_hour // 시간
, tm.tm_min // 분
, tm.tm_sec ); // 초
}
코드는 가독성을 위해 이렇게 작성하였습니다
(이렇게 하면 오류납니다,,)
2022년 11월 12일 15시 42분 44초 잘 출력되는걸 확인해볼수있습니다.
갑자기 든생각인데 시간을 AM PM형식으로 출력하려면
어떤식으로해야할까요
#include<stdio.h>
#include<time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
char pm[3] = "PM"; // 오후
char am[3] = "AM"; // 오전
int n = 0; //16시를 4시로 바꾸고 저장해줄 변수 n 선언
if (13 <= tm.tm_hour && tm.tm_hour <= 23) { //13시 보다 크거나 23시보다 작을때
n= tm.tm_hour - 12; //12를 빼주어야 1시~11시까지로 나타낼수있겠죠?
}
if (13 <= tm.tm_hour && tm.tm_hour <= 23) { // 오후는 13시부터 23시까지 잡았습니다
printf("%s %d",pm,n);
}
else {
printf("%s %d",am,n); // 아니라면 오전으로 출력
}
}
오후 4시라고 잘 나왔습니다.
(혹시 반례나 이상한게 있다면 얘기해주세요)
봐주셔서 감사합니다~!
사실 전역한지 얼마 안되어서
16시 라고 이야기하는게 편하네요,,
'C언어 > 매일 매일 안빼먹기' 카테고리의 다른 글
(C언어) int 범위 초과하는 숫자 계산(1) / 문자열 역순으로 바꾸기 (0) | 2022.11.14 |
---|---|
(C언어) 백준 10809: 알파벳 찾기 / 배열 비교 (0) | 2022.11.13 |
(C언어) 배열 안에 여러 값들 비교하여 중복 값만 출력하기 (0) | 2022.11.10 |
(C언어) scanf 문자형 입력 오류 getchar() 해결 (0) | 2022.11.10 |
(C언어) while 문에서 scanf로 무한히 입력 받고 조건 받아서 종료하기 (0) | 2022.11.10 |