303

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

タイムスタンプ変換を行うモジュールまたは関数はありますか?

4

12 に答える 12

353

別の方法は使用することcalendar.timegmです:

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

%sまた、フラグよりも移植性がありますstrftime(Windowsでは機能しません)。

于 2010-05-05T18:56:46.017 に答える
161

Python> = 3.3では、 timestamp()メソッドを呼び出すだけで、タイムスタンプをfloatとして取得できます。

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
于 2013-04-09T18:57:12.633 に答える
143

ちょうどこれを見つけました、そしてそれはさらに短いです。

import time
def expires():
    '''return a UNIX style timestamp representing 5 minutes from now'''
    return int(time.time()+300)
于 2010-05-05T20:06:34.427 に答える
57

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

import time
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())
于 2013-04-30T19:18:01.590 に答える
49

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

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

注:これはLinuxでのみ機能し、この方法はタイムゾーンでは機能しません。

于 2010-05-05T18:51:26.110 に答える
11

datetime日時オブジェクトからposixタイムスタンプに変換するための壊れにくいベースのソリューションは次のとおりです。

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

詳細については、Pythonでdatetime.dateをUTCタイムスタンプに変換するをご覧ください。

于 2012-11-16T20:26:02.713 に答える
6
def in_unix(input):
  start = datetime.datetime(year=1970,month=1,day=1)
  diff = input - start
  return diff.total_seconds()
于 2012-08-17T17:51:25.583 に答える
4

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

結果の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
于 2012-04-06T20:22:35.353 に答える
4

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

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_timestampsimple-dateの一部です。ただし、そのパッケージを使用している場合は、おそらく次のように入力します。

SimpleDate(my_datetime).timestamp + 5 * 60

my_datetimeのより多くのフォーマット/タイプを処理します。

于 2013-06-19T03:08:54.797 に答える
1
def expiration_time():
    import datetime,calendar
    timestamp = calendar.timegm(datetime.datetime.now().timetuple())
    returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
    return returnValue
于 2012-11-16T20:39:42.110 に答える
1

timedelta.total_seconds()python-2.7以降で動作するソリューションに注意してください。calendar.timegm(future.utctimetuple())Pythonの下位バージョンに使用します。

于 2013-09-26T17:12:11.297 に答える
0

組み込みのタイムスタンプ関数を使用したこの方法はどうですか?スニペットは(現在の時刻だけでなく)異なる時刻で機能しています。

import datetime

a = "2017-01-01 14:30:00"
b = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
c = int(b.timestamp()/60.0)
alarm_time = c + 5

ランタイム環境OS:Ubuntu 16.04 Python 3.6

于 2021-11-12T00:27:55.797 に答える