2013-04-11 6 views
48

私は、StackExchangeでソリューションを探していますが、何も必要なものはありません。 JavaScriptでは、1970年1月1日以降、UTC時間を計算するために次のコードを使用しています。PythonでUTC時間を取得するには?

function UtcNow() { 
    var now = new Date(); 
    var utc = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()); 
    return utc; 
} 

同等のPythonコードは何ですか?

+1

:[Pythonの:どのようにdatetime.today(の値を取得します)それは "タイムゾーン対応"ですか?](http://stackoverflow.com/q/4530069/4279) – jfs

答えて

80

datetime.utcnow()を使用してこのコードを試してください:あなたはあなたが必要とするすべては終わりをsubstractと日付を開始する2つの日付の間に費やされる時間の量を計算する必要がある場合、あなたの目的のために

from datetime import datetime 
datetime.utcnow() 

を。このようsubstractionの結果はPythonのドキュメントからtimedelta object.

です:

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) 

そして、これは、デフォルトでは、あなたがそれの定義で言及したフィールドのいずれかを得ることができることを意味 - 日、秒、マイクロ秒、ミリ秒を、分、時間、週。また、timedeltaインスタンスには、total_seconds()メソッドがあります。

期間に含まれる合計秒数を返します。 (td.microseconds +(td.seconds + td.days * 24 * 3600)* 10 * 6)/ 10 * 6と等価で、真の除算が有効になっています。フォームで

21

あなたの元に最も近い:

import datetime 

def UtcNow(): 
    now = datetime.datetime.utcnow() 
    return now 

あなたの代わりにこれを使用し、1970年1月1日ではなく、ネイティブのPython datetimeからの秒数を知る必要がある場合:

return (now - datetime.datetime(1970, 1, 1)).total_seconds() 

Pythonには、Javascriptで慣れ親しんでいるかもしれないものとは違う命名規則があります(PEP 8を参照)。また、単に別の関数の結果を返す関数は、むしろ愚かです。よりアクセスしやすいようにするだけの場合は、単に関数を割り当てることによって、関数の別の名前を作成することができます。上記の最初の例は、次のように置き換えることができます:

utc_now = datetime.datetime.utcnow 
+1

私は上のより高い評価されたものよりあなたの答えが好きです。ここで深みをありがとうございます。 –

+0

@ジョーダン、私の答えを振り返って私はグローバルレベルではなく関数の内部にインポートを置くことによって文章的な間違いを犯したことを認識しています。 –

+7

別の関数でUtcNow()をラップすることを考慮する必要があります。それはあまりにも単純です。また、アンダースコアを使用しないでください。 PEP 8はとても退屈です。 – vcarel

3

から、あなたはすでにstrftimeメソッドでタイムスタンプに書き出すことができます。あなたの関数の例を次に示します。あなたはマイクロ秒をしたい場合

import datetime 
def UtcNow(): 
    now = datetime.datetime.utcnow() 
    return int(now.strftime("%s")) 

、エクスポート、文字列を変更する必要があるとのように浮かぶようにキャスト:return float(now.strftime("%s.%f"))関連

+0

文字列に変換して番号を直接得ることができる場合? –

+0

ポイントは、関数上のものを変更することができ、その理由から、 'time.time()'を使わずに日時オブジェクトに忠実であることです。 time.mktime(now.timetuple())を使用することもできます。 intに直接変換する とにかく、この単純なケースでは、 'time.time()'も有効なオプションです。 私が奇妙に感じるのは、秒を見つけるためにtimedeltaに行くことです。 – hectorcanto

関連する問題