web-dev-qa-db-ja.com

UNIXのタイムスタンプ文字列を読み取り可能な日付に変換する

私は、Pythonのunixタイムスタンプ(すなわち "1284101485")を表す文字列を持っていて、それを読みやすい日付に変換したいのです。 time.strftimeを使用すると、TypeErrorが得られます。

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str
702
VeryNewToPython

datetimeモジュールを使う:

from datetime import datetime
ts = int("1284101485")

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
1048
Michał Niklas
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

http://seehuhn.de/pages/pdate からの引用

210
Daniel

最も投票された回答はfromtimestampを使用することを提案します。fromtimestampはローカルタイムゾーンを使用するのでエラーが発生しやすいです。問題を回避するには、UTCを使用することをお勧めします。

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

Posix_timeは変換したいPosix Epoch時間です。

139
rkachach
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'
70
John La Rooy

2つの部分があります。

  1. Unixタイムスタンプ( "Epochからの秒数")を現地時間に変換します。
  2. 現地時間を希望の形式で表示します。

ローカルタイムゾーンが過去に異なるutcオフセットを持っていて、pythonがtzデータベースにアクセスできない場合でも機能するローカルタイムを取得するための移植性のある方法はpytzタイムゾーンを使うことです:

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

それを表示するには、あなたのシステムでサポートされている任意の時間フォーマットを使うことができます。

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

現地時間が不要な場合は、代わりに読み取り可能なUTC時間を取得してください。

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

どの日付が返されるか に影響を与える可能性のあるタイムゾーンの問題を気にしないのであれば、またはpythonがあなたのシステムのtzデータベースにアクセスできるのであれば:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

Python 3では、stdlibだけを使ってタイムゾーンに対応した日付時刻を得ることができます(例えば、Windows上でpythonがあなたのシステムのtzデータベースにアクセスできない場合、UTCオフセットは間違っているかもしれません):

#!/usr/bin/env python3
from datetime import datetime, timezone

utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

timeモジュールの関数は対応するC APIの細いラッパーであるため、対応するdatetimeメソッドより移植性が低い可能性があります。それ以外の場合は、それらも使用できます。

#!/usr/bin/env python
import time

unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  
55
jfs

UNIXタイムスタンプからの人間が読めるタイムスタンプのために、私は以前スクリプトでこれを使用しました:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

出力:

'2012年12月26日'

34
Jared Burrows

このように現在時刻を変換することができます

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

文字列内の日付をさまざまな形式に変換します。

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013
24
Nick

time/datetime packageを使用する以外に、 pandas を使用して同じ問題を解決することもできます。ここで、 pandas を使用して timestampを変換できます。 to 読みやすい日付

タイムスタンプは2つの形式にすることができます。

  1. 13桁(ミリ秒) - ミリ秒 を日付に変換するには、次のようにします。

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10桁(秒) - を日付に変換するには、次のようにします。

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    
16
shubham
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

また、タイムスタンプから読み取り可能な日付を時間とともに取得し、日付の形式を変更することもできます。

9
Rishabh Jhalani
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
4
itsaruns

これがgmtimeとformat関数を使ってできるもう一つの方法。

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

出力:2018-10-4 11:57:44

2
h3xus

私はちょうどうまく使用されました:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
2
nimmy

簡単にするために easy_date を使うことができます。

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
0
Raphael Amoedo

早くて汚れたライナー:

'-'.join(str(x) for x in list(Tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'

0
eqzx