0

現在、YYYYmmddHHMMSS 形式の日付を UNIX タイムスタンプに変換しようとしていますが、エラー (ValueError: year is out of range) が発生します。

import datetime

def ts(date):
    return datetime.datetime.fromtimestamp(date).strftime('%Y%m%d%H%M%S')

if __name__ == "__main__":
    date = 20130814100000
    print ts(date)
4

4 に答える 4

5

日付は文字列でなければなりません。これがその方法です。(日付が整数の場合は、date = str(date).

>>> import time
>>> from datetime import datetime
>>> date = '20130814100000'
>>> dt = datetime.strptime(date, '%Y%m%d%H%M%S')
>>> print dt
2013-08-14 10:00:00
>>> print time.mktime(dt.timetuple())
1376467200.0

time関数もありstrptimeますが、あまり役に立たないstruct_timeオブジェクトを返します。ただし、UNIX 時間のみが必要な場合は、それも使用できます。

>>> time.mktime(time.strptime(date, '%Y%m%d%H%M%S'))
1376467200.0
于 2013-08-14T12:18:51.073 に答える
4

ここでの問題は.fromtimestamp()、YYYYmmdd としてフォーマットされた日付ではなく、Unix タイムスタンプを期待していることだと思います...

そこにある日付情報を解析するには、.strptime()または優れたpython-dateutilパッケージを使用することをお勧めします。

import datetime

def ts(date):
    stamp = datetime.datetime.strptime(date, '%Y%m%d%H%M%S')
    return stamp.strftime('%Y%m%d%H%M%S')

また

from dateutil.parser import parse

def ts(date):
    stamp = parse(date)
    return stamp.strftime('%Y%m%d%H%M%S')

http://labix.org/python-dateutil

于 2013-08-14T12:18:44.333 に答える
2

全体として、コードは次のようになります。

import datetime

def ts(date):
    return datetime.datetime.strptime(date, '%Y%m%d%H%M%S')

if __name__ == "__main__":
    date = "20130814100000"
    print ts(date)
于 2013-08-14T12:20:06.893 に答える
0

時間を表すさまざまな方法について、混乱しているようですね。割り当てた値はdate、既に「2013-08-14 10:00:00」のフォーマットされたタイムストリングになっているように見えますが、 fromtimestamp. この関数は、1970 年 1 月 1 日の午前 0 時から経過した秒数である Unix タイムスタンプを想定しています。

このようなものがあなたが探しているものだと思います:

import datetime

def ts(datestr):
    return datetime.datetime.strptime(datestr, "%Y%m%d%H%M%S")

if __name__ == "__main__":
    date = 20130814100000
    print ts(date)

strftimeあなたが持っていたのと同じように、時間を文字列にフォーマットするためのものです。文字列を時間に解析strptimeするためのものです。

于 2013-08-14T12:20:43.413 に答える