web-dev-qa-db-ja.com

pythonで日時を整数に変換する方法

pythonでYYYY-MM-DD hh:mm:ss形式を整数に変換するにはどうすればよいですか?たとえば、2014-02-12 20:51:14->整数に。

私はhh:mm:ssのみを変換する方法を知っているが、yyyy-mm-dd hh:mm:ss

def time_to_num(time_str):
    hh, mm , ss = map(int, time_str.split(':'))
    return ss + 60*(mm + 60*hh)
8

整数がエンコードするものに依存します。日付を前の時刻からのミリ秒数に変換できます。多くの場合、人々は1970年1月1日午前12:00、1900などに添付してこれを行い、その時点からのミリ秒の整数として時間を測定します。 datetimeモジュール(またはそれに似た他のモジュール)には、これを行う機能があります。ミリ秒に変換するためのGoogleだけです。

年、月、日を意味的にエンコードする場合、その方法の1つは、整数桁内でそれらを並置するのに十分な大きさの順序値でこれらのコンポーネントを乗算することです。

2012-06-13-> 20120613 = 10,000 *(2012)+ 100 *(6)+ 1 *(13)

def to_integer(dt_time):
    return 10000*dt_time.year + 100*dt_time.month + dt_time.day

例えば。

In [1]: import datetime

In [2]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:def to_integer(dt_time):
:    return 10000*dt_time.year + 100*dt_time.month + dt_time.day
:    # Or take the appropriate chars from a string date representation.
:--

In [3]: to_integer(datetime.date(2012, 6, 13))
Out[3]: 20120613

分と秒も必要な場合は、必要に応じて桁を表示するためにさらに桁を追加します。

レガシーシステム、特にレガシーSQLデータベースから日付ベースのデータを引き出すシステムで、この2番目の方法に頻繁に遭遇しました。

非常に悪いです。最終的には、日付の整列、整数形式で表示される月または日のオフセットの計算(たとえば、12月を渡すときに月を1にリセットし、年の値をインクリメントする)、および整数形式との間で変換します。

そのような規約が、作業中のAPIの深く、低レベルで徹底的にテストされたセクションに存在しない限り、データを消費するすべての人がこの整数表現とそのすべてのヘルパー関数を信頼できるように、その結果、多くの人々が、至る所で基本的な日付処理ルーチンを書き直しています。

可能な限り、datetime.dateのような日付コンテキストに値を残す方がはるかに良いので、その操作は自然な日付ベースのコンテキストで表現され、一部の開発者ではありません整数への個人的なハック。

13
ely

私はそのためのショートカットがあると思う:

# Importing datetime.
from datetime import datetime

# Creating a datetime object so we can test.
a = datetime.now()

# Converting a to string in the desired format (YYYYMMDD) using strftime
# and then to int.
a = int(a.strftime('%Y%m%d'))
4
Chicrala