1

システムの time_t を取り、それを人間が読める日付/時刻に変換する時間コンバーターを作成しています。ああ、これは私の 2 番目の Python スクリプトです。その事実は脇に置いて先に進みます。

完全なスクリプトはここでホストされています。

年と月のコンバーターを作成するのはかなり簡単でしたが、1 日を機能させようとして深刻な壁にぶつかりました。ご覧のとおり、私は 1970 年から今日に至るまで、あらゆる方法で総当りを試みてきました。残念ながら、その日は -105 と表示されます。

それを行うためのより良い方法、または私がここで試みたことを修正する方法を知っている人はいますか? 現在午前 3 時 30 分なので、明らかな何かを見落としている可能性は十分にあります。

申し訳ありませんが、Python を学習するために手動で行っていることに注意するのを忘れていました。残念ながら、日付関数を介してそれを行うと、目的が無効になります。

4

4 に答える 4

8

使用しない理由:

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

datetime モジュールは、すべてのエッジ ケース (閏年、閏秒、閏日) とタイム ゾーンの変換 (オプションの 2 番目の引数を使用) を処理します。

于 2009-09-18T15:26:30.790 に答える
3

次のいずれかで実行できます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'
于 2009-09-18T15:25:42.273 に答える
1

(Pythonを学ぶためにこれを行うと想定しているので、コードのエラーを指摘します)。

>>> years = SecondsSinceEpoch / 31540000

いやいやいやいやいや。あなたはそれをすることはできません。31536000秒の年もあれば、31622400秒の年もあります。

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

真の値が真であるかどうかをテストする必要はありません。:-) 行う:

>>> if calendar.isleap(yeariterator):

その代わり。

また、変更します。

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

に:

範囲内のyeariteratorの場合(1970、yearsfordayfunction):

これでエラーも修正されます。2009年以降まで停止しないため、1年の残り日数が105日であるため、答えは-105になります。

また、月ごとの計算にはあまり意味がありません。年々うまくいきます。

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

そして、8つのスペースのインデントはたくさんあります。4がより一般的です。

また、年と日を2回計算するのではなく、1つの方法で計算します。

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
于 2009-09-18T15:51:27.217 に答える
0

また、投稿したコードで奇妙なことを指摘します。

    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を定義する必要があるため、別の (より紛らわしい) 例外が発生します。

于 2009-09-19T02:40:53.110 に答える