문제

나는 시스템 time_t를 가져 와서 인간 읽을 수있는 날짜/시간으로 변환하기 위해 시간 변환기를 작성해 왔습니다. 아, 그리고 이것은 나의 두 번째 파이썬 스크립트입니다. 우리는 그 사실을 제쳐두고 계속 진행할 것입니다.

전체 스크립트가 호스팅됩니다 여기.

연도와 달 동안 컨버터를 쓰는 것은 상당히 쉬웠지만, 나는 하루를 작동 시키려고 노력하는 심각한 벽돌 벽을 쳤다. 보시다시피, 나는 1970 년부터 오늘까지 내 길을 무차별하려고 노력했습니다. 불행히도, 하루는 -105로 나옵니다.

누구든지 더 나은 방법을 알고 있습니까? 아니면 내가 여기서 시도한 것을 고치는 방법을 아는 사람이 있습니까? 현재 오전 3시 30 분이므로 명백한 것을 놓치고있을 가능성이 있습니다.

죄송합니다. 파이썬을 배우기 위해 수동 으로이 작업을 수행한다는 점을 잊었습니다. 날짜 기능을 통해 그렇게하는 것은 불행히도 목적을 무너 뜨립니다.

도움이 되었습니까?

해결책

(파이썬을 배우기 위해 이것을한다고 가정하므로 코드의 오류를 지적하겠습니다).

>>> years = SecondsSinceEpoch / 31540000

비 노노노. 당신은 그렇게 할 수 없습니다. 몇 년에는 31536000 초가 있고 다른 해에는 31622400 초가 있습니다.

>>> if calendar.isleap(yeariterator) == True:

진정한 값이 사실인지 테스트 할 필요가 없습니다. :-) 하다:

>>> if calendar.isleap(yeariterator):

대신에.

또한 변경 :

>>> yeariterator = 1969
>>> iterator = 0
>>> while yeariterator < yearsfordayfunction:
>>>     yeariterator = yeariterator + 1

에게:

Range (1970, YearsfordayFunction)의 Yeariterator의 경우 :

또한 오류를 해결할 수 있습니다. 2009 년 이후까지 멈추지 않으므로 연중 105 일이 남아 있기 때문에 답변 -105를 얻습니다.

또한 월별 계산에는 별이 많지 않습니다. 해마다 잘 작동합니다.

    for yeariterator in range(1970, yearsfordayfunction):
            if calendar.isleap(yeariterator) == True:
                    days = days - 366
            else:
                    days = days - 365

그리고 8 개의 공간의 들여 쓰기가 많습니다. 4가 더 일반적입니다.

또한, 두 번 수행하는 대신 한 가지 방법으로 연도와 날을 계산합니다.

def YearDay():
    SecondsSinceEpoch = int(time.time())
    days = SecondsSinceEpoch // 86400 # Double slash means floored int.
    year = 1970
    while True:
            if calendar.isleap(year):
                    days -= 366
            else:
                    days -= 365
            year += 1
            if calendar.isleap(year):
                    if days <= 366:
                            return year, days
            else:
                    if days <= 365:
                            return year, days


def MonthDay(year, day):
    if calendar.isleap(year):
            monthstarts = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
    else:
            monthstarts = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]

    month = 0
    for start in monthstarts:
            if start > day:
                    return month, day - monthstarts[month-1] + 1
            month += 1

다른 팁

사용하지 않는 이유 :

from datetime import datetime
the_date = datetime.fromtimestamp(the_time)
print(the_date.strftime('%Y %B %d'))

DateTime 모듈은 모든 에지 케이스 (도약, 도약 초, 도약 일) 및 시간대 전환 (선택적 두 번째 인수 포함)을 처리합니다.

당신은 그것을 함께 할 수 있습니다 time.strftime:

>>> import time
>>> time.strftime('%Y %B %d')
'2009 September 18'

또는 함께 datetime.date.strftime:

>>> import datetime
>>> datetime.date.today().strftime('%Y %B %d')
'2009 September 18'

또한 게시 한 코드에서 이상한 것을 지적하겠습니다.

    try:
            SecondsSinceEpoch = time.time()
    except IOError:
            Print("Unable to get your system time!")

1.) 왜 time.time() ioerror를 올리시겠습니까? 내가 그 함수가 오류를 제기하는 것이 불가능하다는 것을 아는 한, 항상 값을 반환해야합니다.

2.) Print 해야한다 print.

3.) 경우에도 time.time 제기했습니다 IOError 예외, 당신은 아마 당신이하고 싶지 않을 예외를 삼키고 있습니다. 다음 줄에는 필요합니다 SecondsSinceEpoch 정의하려면 또 다른 (더 혼란스러운) 예외를 제기 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top