Unixタイムスタンプを生成するにはどうすればよいですか?


240

関連する質問は「Datetime To Unix timestamp」ですが、この質問はより一般的です。

最後の質問を解決するには、Unixタイムスタンプが必要です。私の興味はPython、Ruby、Haskellですが、他のアプローチも歓迎します。

Unixタイムスタンプを生成する最も簡単な方法は何ですか?


少し前にオンラインツールを作成しました。 quickhash.com/timestamp
ABキャロル

@ABCarrollオンラインツールがどのようにUnixタイムスタンプを提供するかを回答してください。マニュアル等を添付してください。多くのデータを提供しているように見えますが、私はターゲットが何であるかを実際に追跡することはできません。
レオ・レオポルド・ヘルツ준 영

gettimeofdayPOSIXおよびLinuxのsyscall名は次のとおりです。stackoverflow.com/ questions / 11765301 / TODO:なぜstrace date +%d呼び出さないのですか?
Ciro Santilli郝海东冠状病六四事件法轮功

時間の範囲(分、日、時間など)を増やして作業
Guy Thouret

回答:


472

LinuxまたはMacOSでは、以下を使用できます。

date +%s

どこ

  • +%s、1970-01-01 00:00:00 UTCからの秒数。(GNU Coreutils 8.24日付マニュアル)

現在の出力例は1454000043です。


1
Solarisの場合:トラス日付2>&1 | grep ^ time | awkの{$ 3印刷} '
ルボミールMlích

BSD日付は+%sもサポートします。datePOSIX.2で通常定義されているように、おそらく普遍的です。
デレクソン2017年

@ĽubomírMlíchSmartOSホスト(SunOS 5.11 joyent_20171026T003127Z)では、/usr/bin/date +%s and / usr / xpg4 / bin / date +%s`の両方が動作しています。POSIX.2勧告と組み合わせると、これはすべてのSolarisでも機能すると思います。
デレクソン2017年

注:60秒date -v+60S +%sを追加する場合:1日を追加する場合date -v+24H +%sなど。。。
gMale

3桁までのミリ秒を生成する方法は?
Parveen Verma

110

Rubyの場合:

>> Time.now.to_i
=> 1248933648

レールに使用できますTime.zone.now.to_i。けれどもそれは同じO / PをあげるTime.now.to)_iが、Time.zone.now.to_iあるRails方法。
2017年

Railsでは、./bin/rails runner "p Time.current.to_i"もう1つのソリューションです。
gipcompany

18

Pythonでは、次の行を追加してタイムスタンプを取得します。

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993

17

curl icanhazepoch.com

基本的には、サービスとしてのUNIXタイムスタンプ(UTaaS)です。


3
へえ、いいね。これがきっかけで、趣味のサイトに同様の機能を追加することができました。curl -L -H "Accept: application/json" unixtimesta.mpあなたに与える{"datetime":"Thu, 19 Jul 2018 12:01:21 GMT","timestamp":1532001681}
クレイグ・アンダーソン


8

UNIXの「date」コマンドは驚くほど用途が広い。

日付-j -f "%a%b%d%T%Z%Y" "`日付 `" "+%s"

date-fで定義された形式のの出力を取得し、エポックからの秒数+%sの形式で出力します(-jは日付を設定しないことを示します)。


4
date: invalid option -- 'j'
nyuszika7h 2014

1
これは、UNIX標準(POSIX)ではなく、GNU日付拡張です。
jlliagre 2014年

8
$ date +%s.%N

where(GNU Coreutils 8.24 Dateマニュアル)

  • +%s、1970-01-01 00:00:00 UTCからの秒数
  • +%N、エポックからのナノ秒(000000000..999999999)

出力例を次に示します1454000043.704350695。BSDのマニュアルにdateフラグに関する正確な説明が含まれていないことに気づきました+%s


なぜナノ秒を含めるの+$Nですか?一部のシステムではUNIXタイムスタンプに含まれていますか?
レオ・レオポルド・ヘルツ준 영

2
FYI、%NMacOSの10.13.1(ハイシエラ)で日付のmanページを文書化されていないと動作しません。私が得たサンプル出力は次のとおり1523342391.Nです。
nishanths


7

まず、Unixの「エポック」またはゼロ時間は1970-01-01 00:00:00Zです(1970年1月1日の真夜中はズールー語またはGMTまたはUTCタイムゾーンを意味します)。Unixタイムスタンプは、その時からの秒数であり、うるう秒は考慮されていません。

Perlで現在時刻を生成するのはかなり簡単です。

perl -e 'print time, "\n"'

与えられた日付/時刻の値に対応する時刻を生成することは、それほど簡単ではありません。論理的には、strptime()POSIX の関数を使用します。ただし、Perl POSIX :: strptimeモジュール(POSIXモジュールとは別)のシグネチャは次のとおりです。

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
                                     POSIX::strptime("string", "Format");

mktimePOSIXモジュールの関数にはシグネチャがあります:

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)

したがって、データの形式がわかっている場合は、次のようにバリアントを記述できます。

perl -MPOSIX -MPOSIX::strptime -e \
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'


3

ハスケル

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime

行きます

import "time"
t := time.Unix()

C

time(); // in time.h POSIX

// for Windows time.h
#define UNIXTIME(result)   time_t localtime; time(&localtime); struct tm* utctime = gmtime(&localtime); result = mktime(utctime);

スウィフト

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970

2

ハスケルで...

それをPOSIXTimeタイプとして取得するには:

import Data.Time.Clock.POSIX
getPOSIXTime

整数として:

import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime

2
public static Int32 GetTimeStamp()
    {
        try
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
            return 0;
        }
    }

2

JavaScriptを試してみましょう:

var t = Math.floor((new Date().getTime()) / 1000);

...またはより良い静的アプローチ:

var t = Math.floor(Date.now() / 1000);

どちらの場合も1000、秒からミリ秒に移動するために除算し、Math.floor経過した秒全体を表すために使用します(丸めではなく、まだ経過していない秒に丸める場合があります)。


これは間違っています。どちらのメソッドmillisecondsも秒ではなく、UNIXタイムスタンプはseconds1970年1月1日00:00 UTCから経過した数です。あなただけの1000とラウンドで割る、JSを使用することができますMath.round(Date.now()/1000)
ルーカスLiesis

1
@LukasLiesisはその日はプレコーヒーだったに違いありません。私はのMath.floor代わりに選択しましたが、私の答えを更新しましたMath.round。乾杯
Madbreaks

0

シェルスクリプト(Bourneファミリ:sh、ksh、bash、zsh、...)からUnixタイムスタンプが必要な場合、これは他の提案(perl、haskell、ruby、python、GNU date)とは異なり、どのUnixマシンでも機能するはずです。 )、POSIX標準コマンドと機能に基づいています。

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'

0

Bash 5には新しい変数があります:

echo $EPOCHSECONDS

または、より高い精度(マイクロ秒単位)が必要な場合:

echo $EPOCHREALTIME

0

dateコマンドを使用してutc date timeを出力する場合は、dateコマンドで-u引数を使用する必要があります。

date -u

出力

Fri Jun 14 09:00:42 UTC 2019

0

nawk:

$ nawk 'BEGIN{print srand()}'
  • 古いバージョンのSolarisやおそらく他のUNIXシステムでも機能しますが、 '' '日付+%s' ''は実装されていません
  • Linuxや、posixツールがGNUバージョン(nawk-> gawkなど)に置き換えられた他のディストリビューションでは機能しません。
  • かなり直感的ではありませんが、間違いなく面白いです:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.