나는 외부 장치의 시간대를 고려하여 주어진 시간을 다른 형식으로 변환하려고 노력 중이며 OS의 시간대 변환을 건너 뜁니다.Python strptime - 한 자리 날짜 처리
처음에는 UTC 초 단위의 시간과 장치의 시간대가 있습니다. 예를 들어, 지금 내가있는 곳은 초 = 1343931446, 시간대 = -0700입니다. 내가 뭘 하려는지 제대로형식으로 변환하는 것입니다, 잠시 동안 제대로 작동합니다. 위의 값은 20120802_111726
이되어야합니다.
다음 코드 블록은 7 월 11 일에 편리하게 작성했습니다. 이 문제는 하루가 어제 (일명 어제 시작) 한 자리 만 오면 구문 분석이 잘못되어 사실 20120821_011726
이된다는 사실에 달려 있습니다. 나는 시간 값을 날짜 시간으로 변환 할 때 time_t
을 인쇄 할 때 time.struct_time(tm_year=2012, tm_mon=8, tm_mday=2, tm_hour=18, tm_min=17, tm_sec=26, tm_wday=3, tm_yday=215, tm_isdst=0)
을 얻을 것이며, datetime
으로 구문 분석 될 때 하나의 문자열로 취급된다는 점을 염두에 두었습니다.
질문은 datetime이 월/시간의 2 문자 입력을 받아들이도록 할 수 있습니까? 그렇지 않으면 올바르게 구문 분석 할 수 있습니까? 아니면 이러한 형식을 변환하는 더 나은 방법이 있습니까? 이 현재 방법은 현재 시스템 시간을 고려하는 방법을 사용할 수 없기 때문에 작성되었습니다. 이는 시스템에서 시간대가 초 단위 시간대와 동일하다는 보장이 없기 때문입니다 에서 얻은.
def convert_time(seconds, tz):
""" Times obtained were in seconds since epoch.
Convert to format YYYYMMDD_HHMMSS.
"""
time_t = time.gmtime(seconds) # convert to time tuple
# convert to datetime format - because time zone comparisons can't be made
# in a format directly convertible from UTC
time_dt = datetime.datetime.strptime(str(time_t.tm_year) +
str(time_t.tm_mon) +
str(time_t.tm_mday) +
str(time_t.tm_hour) +
str(time_t.tm_min) +
str(time_t.tm_sec),
'%Y%m%d%H%M%S')
# Convert time zone to timedelta
offset = datetime.timedelta(hours=int(tz.lstrip('-')[:2]),
minutes=int(tz.lstrip('-')[2:]))
sign = -1 if tz.startswith('-') else 1
time_dt = time_dt + sign * offset
time_dt = time_dt.strftime('%Y%m%d_%H%M%S')
return time_dt
왜 사용하지'datetime.datetime (* 써서 time_t : 간단히 빼기 또는 초로 변환 시간대를 추가 한 다음 원하는 문자열이 서식을 time.strftime 기능을 사용하여 [: 6] = 없음 tzinfo)'? –
또한 오프셋을 처리하려면 시간대 개체 ([documentation] (http://docs.python.org/library/datetime.html#tzinfo-objects) 참조)를 사용할 수 있습니다. timedelta 객체는 갈 길이 아닙니다. –
그 변환 방법은 완벽하게 작동했습니다. 나는 내 방법이 매우 둥글다는 것을 알았고, 그 실수는 그것을 더욱 악화시켰다. 저것을 응답으로 배치하게 자유롭게 느끼십시오. – russ36363