関連する質問は "Datetime To Unix timestamp" ですが、この質問はより一般的です。
最後の質問 を解決するにはUnixタイムスタンプが必要です。 私の興味はPython、Ruby、Haskellですが、他のアプローチも歓迎します。
Unixタイムスタンプを生成する最も簡単な方法は何ですか?
LinuxまたはMacOSでは、次を使用できます。
date +%s
どこで
+%s
、1970-01-01 00:00:00 UTCからの秒数。 (GNU Coreutils 8.24日付マニュアル)現在の出力例は1454000043です。
rubyの場合:
>> Time.now.to_i
=> 1248933648
Pythonで次の行を追加してタイムスタンプを取得します。
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
curl icanhazepoch.com
基本的には、サービスとしてのUNIXタイムスタンプ(UTaaS)です。
Perlの場合:
>> time
=> 1335552733
UNIXの「日付」コマンドは驚くほど多用途です。
date -j -f "%a%b%d%T%Z%Y" "` date` "" +%s "
date
の出力を取得します。これは-fで定義された形式になり、その後、エポックからの秒数+%sの形式で出力します(-jは日付を設定しないことを意味します)。
まず、Unixの「エポック」またはゼロタイムは1970-01-01 00:00:00Z(ZuluまたはGMTまたはUTCタイムゾーンの1970年1月1日の午前0時を意味します)です。 Unixタイムスタンプは、その時刻からの秒数であり、うるう秒を考慮していません。
Perlで現在の時刻を生成するのはかなり簡単です。
Perl -e 'print time, "\n"'
特定の日付/時刻値に対応する時刻を生成するのは、それほど簡単ではありません。論理的には、POSIXのstrptime()
関数を使用します。ただし、Perl POSIX :: strptimeモジュール(POSIXモジュールとは別のもの)には次のシグネチャがあります。
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) =
POSIX::strptime("string", "Format");
POSIXモジュールの関数mktime
には次のシグネチャがあります。
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"'
$ date +%s.%N
where(GNU Coreutils 8.24日付マニュアル)
+%s
、1970-01-01 00:00:00 UTCからの秒数+%N
、エポック以降のナノ秒(000000000..999999999)現在の出力例は1454000043.704350695
です。 date
のBSDマニュアルには、フラグ+%s
に関する正確な説明が含まれていないことに気付きました。
完全を期すために、PHP:
php -r 'echo time();'
BASHの場合:
clitime=$(php -r 'echo time();')
echo $clitime
in Haskell
import Data.Time.Clock.POSIX
main :: IO ()
main = print . floor =<< getPOSIXTime
in Go
import "time"
t := time.Unix()
in 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);
in Swift
NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970
試してみましょう JavaScript :
var t = Math.floor((new Date().getTime()) / 1000);
...またはより良い、静的アプローチ:
var t = Math.floor(Date.now() / 1000);
どちらの場合も、1000
で除算して秒からミリ秒に移動し、Math.floor
を使用して、経過した秒全体のみを表します(丸めに対して、まだ経過していない秒に切り上げる場合があります)。
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;
}
}
Haskellでは...
POSIXTime型として戻すには:
import Data.Time.Clock.POSIX
getPOSIXTime
整数として:
import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime
シェルスクリプト(Bourneファミリ:sh、ksh、bash、zsh、...)からUnixタイムスタンプが必要な場合、他の提案(Perl、haskell、Ruby、python、GNU date)、POSIX標準コマンドおよび機能に基づいています。
PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'
Bash 5には新しい変数があります:
echo $EPOCHSECONDS
または、より高い精度(マイクロ秒単位)が必要な場合:
echo $EPOCHREALTIME
Dateコマンドを使用してutc date timeを出力する場合、dateコマンドで-u引数を使用する必要があります。
例
date -u
出力
Fri Jun 14 09:00:42 UTC 2019
NodeJSで、ターミナルを開いて次のように入力します。node -e "console.log(new Date().getTime())"
またはnode -e "console.log(Date.now())"