2009-07-30 31 views
145

Câu hỏi liên quan là "Datetime To Unix timestamp", nhưng câu hỏi này tổng quát hơn.Làm cách nào để tạo các dấu thời gian Unix?

Tôi cần dấu thời gian Unix để giải quyết last question. Sở thích của tôi là Python, Ruby và Haskell, nhưng các phương pháp tiếp cận khác được hoan nghênh.

Cách dễ nhất để tạo dấu thời gian Unix là gì?

+0

tôi đã thực hiện một công cụ trực tuyến một số thời gian trước đây. https://quickhash.com/timestamp –

+0

@ A.B.Carroll Bạn có thể vui lòng giải thích như là một anwer cách công cụ trực tuyến của bạn cung cấp Unix timestamps? Xin vui lòng, đính kèm một hướng dẫn sử dụng vv cho nó. Nó dường như cung cấp rất nhiều dữ liệu nhưng tôi không thể thực sự làm theo mục tiêu là gì. –

+0

'gettimeofday' là tên POSIX và Linux syscall: https://stackoverflow.com/questions/11765301/how-do-i-get-the-unix-timestamp-in-c-as-an-int/11765379# 11765379 TODO: tại sao 'strace date +% d' không gọi nó? –

Trả lời

260

Trong Linux, bạn có thể sử dụng:

date +%s 

nơi

  • +%s, giây từ 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 ngày thủ công)

Ví dụ đầu ra tại 1454000043.

+8

Lưu ý: hoạt động trên Mac OS X, cũng – JDS

+0

Trên Solaris: giàn ngày 2> & 1 | grep^thời gian | awk '{print $ 3}' –

+0

Ngày BSD cũng hỗ trợ +% s. Có lẽ phổ biến, vì 'ngày' thường được định nghĩa trong POSIX.2. – Dereckson

109

trong Ruby:

>> Time.now.to_i 
=> 1248933648 
+0

Chạy nó từ dòng lệnh: 'ruby -e 'đặt Time.now.to_i'' – Pred

+0

cho đường ray bạn có thể sử dụng' Time.zone.now.to_i'. Mặc dù nó sẽ cho cùng một o/p như 'Time.now.to) _i' nhưng' Time.zone.now.to_i' là cách 'Rails'. – Swaps

7

Trước hết, các Unix 'kỷ nguyên' hoặc không có thời gian là 1970/01/01 00: 00: 00Z (có nghĩa là nửa đêm 01 tháng 1 năm 1970 trong Zulu hoặc Múi giờ GMT hoặc UTC). Dấu thời gian Unix là số giây kể từ thời điểm đó - không tính số giây nhảy vọt.

Tạo thời gian hiện tại trong Perl là khá dễ dàng:

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

Tạo thời gian tương ứng với một giá trị/lần ngày đã cho là khá ít dễ dàng. Về mặt logic, bạn sử dụng hàm strptime() từ POSIX. Tuy nhiên, Perl POSIX :: strptime mô-đun (đó là tách biệt với các mô-đun POSIX) có chữ ký:

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

Chức năng mktime trong module POSIX có chữ ký:

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

Vì vậy, nếu bạn biết định dạng dữ liệu của mình, bạn có thể viết một biến thể trên:

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

Lệnh unix 'date' cực kỳ linh hoạt.

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

Đưa đầu ra của date, mà sẽ được ở định dạng xác định bởi -f, và sau đó in nó ra (-j nói không cố gắng để thiết lập ngày) theo hình thức +% s, giây từ thời đại.

+3

'ngày: tùy chọn không hợp lệ - 'j'' – nyuszika7h

+0

Đó là tiện ích mở rộng ngày của GNU, không phải trong tiêu chuẩn Unix (POSIX). – jlliagre

2

Đây là một công cụ nhỏ, tôi đặt lại với nhau kể từ khi tôi đang luôn luôn cần phải có được và chuyển đổi timestamps unix: http://www.unixstamp.com

Nó hỗ trợ hầu hết các định dạng bao gồm javascript timestamps millisecond.

+0

Bây giờ liên kết đến tên miền để bán –

16

Trong python thêm những dòng sau đây để có được một tem thời gian:

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

Trong Haskell ...

Để có được nó trở lại như một loại POSIXTime:

import Data.Time.Clock.POSIX 
getPOSIXTime 

Là một số nguyên:

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; 
     } 
    } 
1

Nếu bạn cần một dấu thời gian Unix từ một kịch bản lệnh shell (Bourne family: sh, ksh, bash, zsh, ...), điều này sẽ hoạt động trên bất kỳ máy Unix nào khác với các đề xuất khác (perl, haskell, ruby, python, Ngày GNU), nó dựa trên một lệnh và tính năng chuẩn của POSIX.

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

curl icanhazepoch.com

Về cơ bản nó là timestamps unix như một dịch vụ (UTaaS)

3

Để hoàn chỉnh, PHP:

php -r 'echo time();' 

Trong BASH:

clitime=$(php -r 'echo time();') 
echo $clitime 
+1

cho bash chúng tôi đã có lệnh 'date', vì vậy tôi không nghĩ rằng nó là cần thiết để gọi php từ đó. – fedorqui

6
$ date +%s.%N 

nơi (GNU coreutils 8,24 ngày thủ công)

  • +%s, giây kể từ 1970/01/01 00:00:00 UTC
  • +%N, nano giây (000000000..999999999) kể từ kỷ nguyên

Ví dụ đầu ra hiện tại 1454000043.704350695. Tôi nhận thấy rằng hướng dẫn sử dụng BSD của date không bao gồm giải thích chính xác về cờ +%s.

+0

Tại sao bạn bao gồm nano giây bằng '+ $ N'? Có bao gồm trong dấu thời gian UNIX trong một số hệ thống không? –

2

trong Haskell

import Data.Time.Clock.POSIX 

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

trong Go

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

trong 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); 

trong Swift

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

Hãy thử JavaScript:

var t = new Date().getTime(); 

...hoặc thậm chí đẹp hơn, cách tiếp cận tĩnh:

var t = Date.now() 
0

Với NodeJS, chỉ cần mở một terminal và gõ:
node -e "console.log(new Date().getTime())" hay node -e "console.log(Date.now())"

Các vấn đề liên quan