가장 가까운 날짜/시간 찾기
코딩을 하다 보면 시간에 대해서 많이 다루게 되는데 이 시간 데이터를 연산이나 비교 등을 할 때가 많다.
그 중에서도 이번에는 가장 근접한 시간을 찾아야 하는데 아이디어가 떠오르지 않아 처음에는 많이 헤맸다.
가장 근접한 수 찾는 함수
먼저, 가장 근접한 수를 찾는 함수를 만들었다.
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array - value)).argmin()
return array[idx]
array에 시간 리스트를 넣고 value에 가장 근접했으면 하는 시간을 넣으면 근접한 시간이 return 될 줄 알았으나,,
시간 데이터는 절댓값을 쓸 수 없어 또 한 번 난관이 닥쳤다.
그래서 생각해 낸 게 int형식인 유닉스 시간으로 변환한 후 함수를 돌리는 것!
유닉스 시간이란?
쉽게 이해하면 1970년 1월 1일 0시부터 시간을 초로 환산하여 정수로 나타낸 수이다.
original_time에 시간 데이터를 넣으면 유닉스 시간이 딱!
unix_time = time.mktime(datetime.strptime(original_time, '%Y-%m-%d %H:%M').timetuple())
이렇게 변환한 다음에 find_nearest 함수에 넣으면 가장 근접한 수를 찾을 수 있다.
이를 다시 일반 시간 형태로 바꿔주면 끝:)
original_time = datetime.fromtimestamp(unix_time).strftime('%Y-%m-%d %H:%M')
수정 )))
def nearest(items, pivot):
return min(items, key=lambda x: abs(x - pivot))
이렇게 해도 된다고 한다.
반응형