랜덤 Date 구하기 (with timeIntervalSince1970)

SteadySlower·2022년 12월 3일
0
post-custom-banner

Unit Test를 만들다가 랜덤 Date를 구현할 필요성이 생겼습니다. 하지만 너무 터무니 없는 랜덤 Date를 만들면 테스트에 지장이 있을 수도 있으니 일단 오늘로부터 1년 이내의 날짜 중에 하나를 랜덤으로 뽑고자 합니다. 이 기능을 만들기 위해서 Date의 timeIntervalSince1970를 활용해보겠습니다.

timeIntervalSince1970

timeIntervalSince1970은 1970년 1월 1일 자정을 0으로 해서 현재까지의 시간을 초 (second)으로 환산해서 시간을 표현하는 방식입니다. 유닉스 계열의 운영체제에서 사용한다고 해서 Unix Time이라고 불리기도 합니다.(Mac 역시도 Unix 기반의 OS입니다.)

Swift의 Date 타입 역시 Unix Time을 사용한 initializer와 Date를 Unix Time으로 바꾸어주는 메소드를 제공합니다.

let unixTime = Date().timeIntervalSince1970
Date(timeIntervalSince1970: unixTime)

랜덤 만들기

timeIntervalSince1970는 TimeInterval 타입으로 리턴되는데요. TimeInterval은 Double의 typeAlias입니다. 따라서 다른 Double과 연산이 가능합니다. 따라서 아래와 같은 방식으로 오늘로부터 1년 이내의 (= 31536000초 이내의) 랜덤 Date 값을 구할 수 있습니다.

// 현재 Date의 TimeInterval 구하기
let now = Date().timeIntervalSince1970
// 0 ~ 31536000 사이의 Int를 하나 구하고 Double로 바꾸기
let gap = Double((0..<31536000).randomElement() ?? 0)
// 현재 TimeInterval에서 랜덤 TimeInterval를 빼고 Date 타입으로 바꾸기
return Date(timeIntervalSince1970: now - gap)
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.
post-custom-banner

0개의 댓글