알고리즘 문제를 푸는 중 시간표현하기 문제가 나왔다. 예전에 자바와, 자바스크립트, 파이썬으로 해본적이 있었지만 c언어로는 경험이 없어정리해두면 좋을 것 같아 포스트로 작성하려고 한다.
#include <stdio.h> #include <time.h>
int main() { time_t timer; struct tm *t; timer = time(NULL); // 현재 시각을 초 단위로 얻기 t = localtime(&timer); // 초를 분리하여 구조체에 넣기 printf("%d년\n", t->tm_year + 1900); // 년도가 1900 빼져있는 상황이다. printf("%02d월\n", t->tm_mon + 1); // month 0 ~ 11 printf("%02d일\n\n", t->tm_mday); printf("현재 시: %d시\n", t->tm_hour); printf("현재 분: %d분\n", t->tm_min); printf("현재 초: %d초\n\n", t->tm_sec); printf("현재 요일: %d일\n", t->tm_wday); // 일요일은 0, 월요일은 1, 화요일은 2, 수요일은 3, 목요일은 4, 금요일은 5, 토요일은 6 printf("올해 몇 번째 날: %d년 %d일 지남\n",t->tm_year+1900, t->tm_yday); // 1월 1일은 0, 1월 2일은 1 }
time.h에 tm 구조체는 아래와 같은 형태로 만들어져있다.
struct tm { int tm_sec; /* Seconds */ int tm_min; /* Minutes */ int tm_hour; /* Hour (0--23) */ int tm_mday; /* Day of month (1--31) */ int tm_mon; /* Month (0--11) */ int tm_year; /* Year (calendar year minus 1900) */ int tm_wday; /* Weekday (0--6; Sunday = 0) */ int tm_yday; /* Day of year (0--365) */ int tm_isdst; /* 0 if daylight savings time is not in effect) */ };
결과
import java.util.GregorianCalendar; public class Main{ public static void main(String[] args){ GregorianCalendar today = new GregorianCalendar(); System.out.println("현재 년도: "+today.get(today.YEAR)+"년"); System.out.println("현재 월: "+(today.get(today.MONTH)+1)+"월"); System.out.println("현재 일: "+today.get(today.DATE)+"일\n"); System.out.println("현재 시: "+today.get(today.HOUR)+"시"); System.out.println("현재 분: "+today.get(today.MINUTE)+"분"); System.out.println("현재 초: "+today.get(today.SECOND)+"초\n"); System.out.println("요일: "+today.get(today.DAY_OF_WEEK)); // 일요일 1 ~ 토요일 7 System.out.println("2019년은 "+(today.get(today.DAY_OF_YEAR)-1)+"일 지났습니다."); } }
자바에는 기존에 Calendar라는 좋은 클래스가 있지만 특별한 형태로 나타낼 수 밖에 없었다. 그러니깐 하나씩 따로 다루기가 어려웠다. 그래서 따로 다루기 위해서는 GregorianCalendar를 사용해주면 좋다.
from datetime import datetime
dt = datetime.now() print("현재 년 %d년" % dt.year) print("현재 월 %02d월" % dt.month) print("현재 일 %02d일" % dt.day)
print("현재 시 %02d시" % dt.hour) print("현재 분 %02d분" % dt.minute) print("현재 초 %02d초" % dt.second)