web-dev-qa-db-ja.com

Python将来5分でUnixタイムスタンプを作成する

将来5分後に "Expires"値を作成する必要がありますが、UNIXタイムスタンプ形式で提供する必要があります。私はこれをこれまで持っています、しかしそれはハックのようです。

def expires():
    '''return a UNIX style timestamp representing 5 minutes from now'''
    Epoch = datetime.datetime(1970, 1, 1)
    seconds_in_a_day = 60 * 60 * 24
    five_minutes = datetime.timedelta(seconds=5*60)
    five_minutes_from_now = datetime.datetime.now() + five_minutes
    since_Epoch = five_minutes_from_now - Epoch
    return since_Epoch.days * seconds_in_a_day + since_Epoch.seconds

私のためにタイムスタンプ変換をするモジュールや関数はありますか?

295
Daniel Rhoden

これを見つけただけで、さらに短くなりました。

import time
def expires():
    '''return a UNIX style timestamp representing 5 minutes from now'''
    return int(time.time()+300)
137
Daniel Rhoden

別の方法は calendar.timegm を使うことです。

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return calendar.timegm(future.timetuple())

strftimeへの%sフラグよりも移植性があります(これはWindowsでは動作しません)。

347
Cat Plus Plus

Python> = 3.3では、 timestamp()メソッド を呼び出すだけで、次のようにタイムスタンプを取得できます。フロート.

import datetime
current_time = datetime.datetime.now(datetime.timezone.utc)
unix_timestamp = current_time.timestamp() # works if Python >= 3.3

unix_timestamp_plus_5_min = unix_timestamp + (5 * 60)  # 5 min * 60 seconds
153
Tim Tisdall

これはあなたが必要とするものです:

import time
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())
57
Ali

datetime.strftimeフォーマット文字列を使用して、%sを使用してエポック形式で時刻を取得できます。

def expires():
    future = datetime.datetime.now() + datetime.timedelta(seconds=5*60)
    return int(future.strftime("%s"))
47
mipadi

これは、datetimeオブジェクトからposixタイムスタンプに変換するためのdatetimeベースの解決方法です。

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return (future - datetime.datetime(1970, 1, 1)).total_seconds()

詳細については、 Pythonでのdatetime.dateからUTCタイムスタンプへの変換 を参照してください。

11
jfs
def in_unix(input):
  start = datetime.datetime(year=1970,month=1,day=1)
  diff = input - start
  return diff.total_seconds()
6
Sravan

重要なのは、変換を開始する前に、使用しているすべての日付がUTCタイムゾーンにあることを確認することです。これを正しく行う方法については、 http://pytz.sourceforge.net/ を参照してください。 utcに正規化することで、夏時間の移行のあいまいさを解消できます。その後、安全にtimedeltaを使用してunix Epochからの距離を計算し、それから秒またはミリ秒に変換することができます。

結果のUNIXタイムスタンプは、それ自体がUTCタイムゾーンにあることに注意してください。ローカライズされたタイムゾーンでタイムスタンプを確認したい場合は、もう一度変換を行う必要があります。

また、これは1970年以降の日付にのみ有効です。

   import datetime
   import pytz

   UNIX_Epoch = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc)
   def Epoch(utc_datetime):
      delta = utc_datetime - UNIX_Epoch
      seconds = delta.total_seconds()
      ms = seconds * 1000
      return ms
4
fawce

以下は、上記の答え(およびミリ秒の修正)に基づいており、タイムゾーンが使用される場合、3.3より前のPython 3のdatetime.timestamp()をエミュレートします。

def datetime_timestamp(datetime):
    '''
    Equivalent to datetime.timestamp() for pre-3.3
    '''
    try:
        return datetime.timestamp()
    except AttributeError:
        utc_datetime = datetime.astimezone(utc)
        return timegm(utc_datetime.timetuple()) + utc_datetime.microsecond / 1e6

質問に厳密に答えるには、次のようにします。

datetime_timestamp(my_datetime) + 5 * 60

datetime_timestamp単純日付 の一部です。しかし、そのパッケージを使用しているのであれば、おそらく次のように入力します。

SimpleDate(my_datetime).timestamp + 5 * 60

これはmy_datetimeのためのより多くのフォーマット/タイプを扱います。

4
andrew cooke

timedelta.total_seconds()を使った解決策はpython-2.7以降で動作することに注意してください。 Pythonの下位バージョンにはcalendar.timegm(future.utctimetuple())を使用してください。

1
mighq
def expiration_time():
    import datetime,calendar
    timestamp = calendar.timegm(datetime.datetime.now().timetuple())
    returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
    return returnValue
1
hd1