카테고리 없음

strftime()

23임규민 2023. 12. 6. 21:07

▨ strptime() [str + parsing+ time]  : 문자열을 POSIXlt 객체로 변환

 strftime()  [str + format + time]  : POSIXlt 객체나 POSIXct 객체에서 원하는 형식의 문자열로 변환

 

형식은 다음과 같다.

strptime('문자열','객체의 형식')
strftime('날짜시각','객체의 형식')

 

strtime() 함수를 먼저 실행해보자. 

 

기존에 /와 :라는 구분자로 나눠진 시간을 format() 형식에서 표시한 다음 strptime() 함수로 출력하면 R이 제공하는 시간 형식으로 변환되는 것이다.

 

다음으로 strftime() 함수도 실행해보자. 

 

> strftime('2023-12-02 18:36:55',"%Y/%m/%d/ %H_%M_%S")
[1] "2023/12/02/ 18_36_55"

R에서 제공하는 형식에서 구분자를 가각 '/' 과 '_' 로 변환해주었다.

 

 

다음과 같이 실행해볼 수도 있고 클래스를 확인해보면 두 함수 모두 "POSIXlt" "POSIXt" 가 나오는 것을 확인할 수 있다.  

# strptime 함수로 오늘 날짜 데이터 생성 
> today <- strptime("2023-11-30",format="%Y-%m-%d")
> today
[1] "2023-11-30 KST"
> class(today)
[1] "POSIXlt" "POSIXt" 

# strftime 함수로 오늘 날짜 데이터 생성 
> today_t <- strptime("2023-11-30",format="%Y-%m-%d")
> today_t
[1] "2023-11-30 KST"
> class(today_t)
[1] "POSIXlt" "POSIXt"

함수명을 보니 학생들이 틀리길 바라며 교묘하게 조사만 바꾸어 놓은 국어 문제가 떠올랐가. 사실 두 함수를 처음 봤을 때 '뭐가 다른 거지?'라는 생각이 가장 먼저 들었다. 치사하게 한 글자만 다르게 만들어놓다니... 심지어 f와 t가 비슷하게 생긴 바람에, 눈에 잘 띄지도 않는다. 두 함수가 헷갈리게 생기기도 했고 이름도 복잡하게 느껴진다. 그렇지 않은가? 대답할 필요 없다.  내가 그렇게 느꼈으니까. 그러나 너무 걱정할 필요 없다. 이 함수는 뒤에서 배울 lubridate의 편의성과 직관성을 강조하기 위한 밑밥일 뿐이다. 그러니 이런 게 있구나 한 번 읽고 넘어가면 된다. 

 

이건 중요한 것은 아닌데, strptime() 함수와 strftime() 함수는 format 인수를 지정하지 않으면 오류가 발생하는 반면, as.POSIXct() 함수와 as.POSIXlt() 함수는 오류 발생 없이 정상적으로 작동한다. 

# as.POSIXct로 날짜 데이터 생성
> today_ct <- as.POSIXct("2023-11-30")
> today_ct
[1] "2023-11-30 KST"
> class(today_ct)
[1] "POSIXct" "POSIXt"

# as.POSIXlt로 날짜 데이터 생성
> today_lt <- as.POSIXlt("2023-11-30")
> today_lt
[1] "2023-11-30 KST"
> class(today_lt)
[1] "POSIXlt" "POSIXt"