3

次の形式のさまざまな日付情報を含む大規模なデータセットがあります。

私はPythonのタイムモジュール、strptime()メソッド、およびstrftime()メソッドに精通しています。ただし、これらの異常な日付形式を変換するために使用できるPythonモジュールがある場合、上記のこれらの日付形式が何で呼び出されるかはわかりません。

独自の計算機を作成せずに、これらの異常な日付形式から%Y%M%D形式を取得する方法はありますか?

ありがとう。

4

6 に答える 6

9

次のようなことを試すことができます。

In [1]: import datetime

In [2]: s = '2012265'

In [3]: datetime.datetime.strptime(s, '%Y%j')
Out[3]: datetime.datetime(2012, 9, 21, 0, 0)

In [4]: d = '41213'

In [5]: datetime.date(1900, 1, 1) + datetime.timedelta(int(d))
Out[5]: datetime.date(2012, 11, 2)

最初のものはよりトリッキーなものですが、%jパラメーターを使用して、指定された年間通算日を解釈します (4 桁の年の後、 で表され%Yます)。2 つ目は、1900 年 1 月 1 日からの単純な日数です。

これは一般的な変換です。入力形式は不明ですが、それに合わせて微調整できることを願っています。

于 2013-01-11T04:56:47.600 に答える
4

Excelの整数からPythonの日時ビット:

2 つの Excel 日付システムがあることに注意してください (1 つは 1900 年 1 月 1 日ベース、もう 1 つは 1904 年 1 月 1 日ベース)。詳細については、 https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excelを参照してください。

また、システムはゼロベースではないことに注意してください。したがって、1900 年システムでは、1900 年 1 月 1 日が 1 日目です (0 日目ではありません)。

import datetime

EXCEL_DATE_SYSTEM_PC=1900
EXCEL_DATE_SYSTEM_MAC=1904

i = 42129  # Excel number for 5-May-2015
d = datetime.date(EXCEL_DATE_SYSTEM_PC, 1, 1) + datetime.timedelta(i-2)
于 2015-05-05T16:51:25.230 に答える
2

これらの形式はどちらも、非常に簡単に操作できます。実際、最初のものは単なる整数なので、このようなことをしてみませんか?

import datetime

def days_since_jan_1_1900_to_datetime(d):
    return datetime.datetime(1900,1,1) + \
        datetime.timedelta(days=d)

2 番目の場合、詳細は形式がどのように定義されているかによって異なります (たとえば、日数が 100 未満の場合でも、年の後に常に 3 桁を期待できますか、または 2 または 1 である可能性がありますか?年は常に 4 桁なのですか?) しかし、その部分を書き留めておけば、非常によく似た方法で実行できます。

于 2013-01-11T04:56:53.887 に答える
0

http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behaviorによると 、年間通算日は「%j」ですが、最初のケースは tordinal() とfromordinal():date.fromordinal(date(1900, 1, 1).toordinal() + x)

于 2013-01-11T04:56:26.630 に答える
0

タイムデルタだと思います。

import datetime
d = datetime.timedelta(days=41213)
start = datetime.datetime(year=1900, month=1, day=1)
the_date = start + d

2 つ目については2012265[:4]、年を取得して同じ方法を使用できます。

編集:%j2番目の回答を参照してください。

于 2013-01-11T04:58:41.593 に答える