strftime

strftime은 시간 커스텀할 수 있게 만들어준 문자열 서식화 함수인데요. 문자열에 날짜에 대한 형식을 지정하면 문자열에 시간에 대한 정보가 들어옵니다. strftime의 원형은 다음과 같습니다.

#include <time.h>

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

 

time.h를 include해야합니다. 

s : 담을 문자열입니다.

max : 문자열의 최대 길이를 지정합니다.

format : 여기에 서식화할 format문자가 들어갑니다. 

tm : 시간정보를 담은 tm구조체가 들어와야합니다. tm구초제는 아래와 같이 정의되어있습니다.

struct tm {
   int tm_sec;    /* 초 (0-60) */
   int tm_min;    /* 분 (0-59) */
   int tm_hour;   /* 시간 (0-23) */
   int tm_mday;   /* 월의 일 (1-31) */
   int tm_mon;    /* 월(0부터 시작) (0-11) */
   int tm_year;   /* 년 */
   int tm_wday;   /* 주의 일 (0-6, Sunday = 0) */
   int tm_yday;   /* 년의 일 (0-365, 1 Jan = 0) */
   int tm_isdst;  /* Daylight saving time */
};

 

반환 : 성공시 문자열의 크기, 실패시 0이 반환됩니다.

 

format의 문자는 매우 다양합니다. 아래의 표로 정리하긴했지만, 이것보다 훨씬 많습니다. 여기에 나오지 않는 format문자는 인터넷 서치하시거나 매뉴얼 페이지를 보시기바랍니다.

format 문자 설명
%a 짧은 요일 이름 Thu
%A 긴 요일 이름 Thursday
%b, %h 짧은 달 이름 Jan
%B 긴 달 이름 January
%c 날짜 + 시간 Tue Apr  5 15:35:05 2022
%C 두자리 연도(00-99) 20
%d 그달의 일(01-31) 30
%D 날짜(MM/DD/YY) 04/05/22
%e 그 달의 일(1-31) 10
%H 그 날의 시(24시간) 23
%I 그 날의 시(12시간) 11
%m 달(01-12) 02
%M 분(00-59) 55
%p 오전/오후 PM
%S 초(00-60) 30
%T %H:%M:%S 12:30:24
%R %H:%M 12:30
%r 12시간 형식의 로컬 시간 05:40:12 PM

 

아래는 이러한 strftime함수를 사용한 예입니다.

#include <time.h>
#include <stdio.h>

int main() {
    time_t now;
    struct tm* t;
    char buf[128] = { 0, };

    time(&now);
    t = localtime(&now);
    if (strftime(buf, sizeof(buf), "current - %c", t) == 0) {
        printf("strftime 실패\n");
        return -1;
    }
    printf("%s\n", buf);

    return 0;
}

 

 

오늘은 4월 5일로 나무 심으러 가도록 합시다.

strptime

strptime함수도 존재하는데, strftime의 역이라고 생각하시면 됩니다. formatting된 문자열에서 시간 구조체인 tm을 얻을 때 사용합니다.

char *strptime(const char *s, const char *format, struct tm *tm);

 

파라미터 설명은 넘어가도록 하고 사용 예를 보도록 하겠습니다.

#include <stdio.h>
#include <string.h>
#include <time.h>

int main(void){
        struct tm tm;
        char buf[255];

        memset(&tm, 0, sizeof(struct tm));
        strptime("2020-09-21 07:09:30", "%Y-%m-%d %H:%M:%S", &tm);
        printf("%d/%d/%d %d:%d:%d\n",tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
                                        tm.tm_hour, tm.tm_min, tm.tm_sec);
}

 

시간을 나타내는 문자열 서식화 함수 strftime과 strptime을 알아보았습니다.

반응형
블로그 이미지

REAKWON

와나진짜

,

datetime 모듈

파이썬에서 날짜와 관련된 데이터를 다룰때에는 datetime이라는 모듈을 import 하여 사용해야합니다. datetime은 날짜와 관련된 여러가지 메소드들을 가지고 있습니다.

 

현재 시간 구하기(now)

현재 시간을 구하려면 아래와 같이 간단한 한줄만 사용하여 나타낼 수 있습니다. now()는 datetime 객체를 반환하여 줍니다.

import datetime

d = datetime.datetime.now()
print (d)
2021-04-18 16:50:43.895283

 

datetime 객체는 년(year), 월(month), 일(day), 시(hour), 분(minute), 초(second)의 필드를 가지고 있습니다. 그래서 필요한 시간의 부분만 사용할 수도 있습니다.

d = datetime.datetime.now()
print (d.year,'년 ', d.month,'월 ', d.day,' 일')
print (d.hour,'시 ',d.minute,'분 ',d.second,'초')
2021 년  4 월  18  일
16 시  58 분  38 초

 

datetime 객체 구하기

위의 현재 시간을 now라는 메소드로 구할 수 있지만 우리가 직접 지정한 날짜를 datetime 객체로 가져오기를 원한다면 datetime 클래스의 생성자를 이용하여 가져올 수 있습니다.'

wuhan_covid19 = datetime.datetime(2019,12,12)
print (wuhan_covid19)
2019-12-12 00:00:00

 

위에서는 날짜만 지정했지만 시간도 같이 지정해줄 수 있습니다.

wuhan_covid19 = datetime.datetime(2019, 12, 12, 3, 3, 3)
print (wuhan_covid19)
2019-12-12 03:03:03

 

strftime() 메소드로 원하는 날짜 형식대로 출력

datetime은 날짜를 형식화해주는 메소드가 존재하는데 메소드명은 strftime(String Format Time)입니다. 메소드에 포맷 문자를 전달하여 원하는 날짜의 형태를 문자열로 가져올 수 있습니다.

포맷 코드는 아래의 표에 정리하였으니 맞는 format code를 조합하여 사용하면 됩니다.

Format Code

포맷 코드 설명
%a 요일을 짧게 표시합니다. Sun
%A 요일을 길게 표시합니다. Sunday
%w 요일을 숫자로 표시합니다. 일요일을 0부터 시작하여 토요일은 6입니다. 0
%d 날(day)을 출력합니다. 1부터 31까지가 있겠죠 18
%b 월을 영어로 짧게 출력해줍니다. Apr
%B 월을 영어로 길게 출력해줍니다. April
%m 월을 숫자로 표현합니다. 04
%y 년을 짧게 숫자로 표시합니다 21
%Y 년을 길게 숫자로 표시합니다. 2021
%H 시간을 24시간의 표현 방식(00-23)으로 숫자로 표시합니다. 18
%I 시간을 0-12시 표시 방법으로 표시합니다 6
%p 오전(AM), 오후(PM)을 표시합니다. PM
%M 분(0 - 59)을 표시합니다. 38
%S 초(0 - 59)를 표시합니다. 55
%f microsecond단위를 표시합니다. 545433
%j 일년중 몇번째일인지 나타냅니다. 108
%U 일년 중 몇번째 주 인지 나타내니다. 이 포맷에서 일요일은 일주일의 시작입니다. 일년은 52주, 53주입니다. 108
%W 일년 중 몇번째 주 인지 나타내는 것은 %U와 같지만 일주일의 시작을 월요일로 정합니다. 108
%c Local version의 날짜와 시간을 나타냅니다. Sun Apr 18 17:26:26 2021
%x Local version의 날짜만 나타냅니다. 04/18/21
%X Local version의 시간만 나타냅니다. 17:26:26

 

아래는 strftime을 통해서 시간을 출력해주는 예제 코드입니다.

now = datetime.datetime.now()

print (now.strftime("%Y/%m(%B)/%d %A %p %I:%m:%S, 일년 중 %U 번째주, 일년 중 %j번째 날 "))
print (now.strftime("%c"))
print (now.strftime("%x"))
print (now.strftime("%X"))
2021/04(April)/18 Sunday PM 05:04:51, 일년 중 16 번째주, 일년 중 108번째 날 
Sun Apr 18 17:30:51 2021
04/18/21
17:30:51

 

datetime 연산

datetime은 연산도 가능한데요. datetime끼리 더하기, 빼기 연산이 가능합니다. 이때 결과는 timedelta의 객체 형태로 반환됩니다.

import datetime

birthday = datetime.datetime(1988,12,11)
now = datetime.datetime.now()
elapsed = now - birthday
print (elapsed)
11816 days, 17:39:16.585322

 

여기까지 파이썬에서 날짜를 다루는 방법을 알아보았습니다.

반응형
블로그 이미지

REAKWON

와나진짜

,