मैं यूनिक्स टाइमस्टैम्प कैसे बना सकता हूं?


240

संबंधित प्रश्न "डेटटाइम टू यूनिक्स टाइमस्टैम्प" है , लेकिन यह प्रश्न अधिक सामान्य है।

मुझे अपना अंतिम प्रश्न हल करने के लिए यूनिक्स टाइमस्टैम्प की आवश्यकता है मेरे हित पायथन, रूबी और हास्केल हैं, लेकिन अन्य दृष्टिकोण स्वागत योग्य हैं।

यूनिक्स टाइमस्टैम्प उत्पन्न करने का सबसे आसान तरीका क्या है?


मैंने कुछ समय पहले एक ऑनलाइन टूल बनाया था। quickhash.com/timestamp
एबी कैरोल

@ABCarroll क्या आप कृपया बता सकते हैं कि आपका ऑनलाइन उपकरण यूनिक्स टाइमस्टैम्प कैसे प्रदान करता है? कृपया, इसके लिए एक मैनुअल आदि संलग्न करें। यह बहुत अधिक डेटा प्रदान करता है लेकिन मैं वास्तव में लक्ष्य का पालन नहीं कर सकता।
लेओ लेपोल्ड हर्ट्ज़ o

gettimeofdayPOSIX और Linux syscall नाम है: stackoverflow.com/questions/11765301/… TODO: strace date +%dइसे क्यों नहीं कहते?
सिरो सेंटिल्ली 郝海东 冠状 i 法轮功

यदि आप के साथ काम करते हैं, और वेतन वृद्धि समय सीमा (जैसे मिनट, दिन, घंटे), मैंने हाल ही में unixtime.ninja के
आदमी थाउट

जवाबों:


472

Linux या MacOS में आप उपयोग कर सकते हैं:

date +%s

कहाँ पे

  • +%s, सेकंड्स 1970-01-01 से 00:00:00 यूटीसी। (GNU Coreutils 8.24 तिथि पुस्तिका)

उदाहरण आउटपुट अब 1454000043।


1
सोलारिस पर: ट्रस दिनांक 2> और 1 | grep ^ समय | awk '{प्रिंट $ 3}'
íubomír Mlích

बीएसडी तिथि भी +% s का समर्थन करती है। संभवतः सार्वभौमिक, जैसा dateकि आमतौर पर POSIX.2 में परिभाषित किया गया है।
डेरेकसन

@ @UbomírMlích एक SmartOS होस्ट (SunOS 5.11 हर्षित_20171026T003127Z) पर, दोनों /usr/bin/date +%s and / usr / xpg4 / bin / date +% s` काम कर रहे हैं। POSIX.2 सिफारिश के साथ संयुक्त, मुझे लगता है कि यह सभी सोलारिस पर भी काम करता है।
डेरेकसन

नोट: 60 सेकंड date -v+60S +%sजोड़ने के लिए : 1 दिन जोड़ने के लिए: date -v+24H +%sऔर इसी तरह। । ।
galeale

केवल 3 अंक तक मिलीसेकंड कैसे उत्पन्न करें?
परवीन वर्मा

110

रूबी में:

>> Time.now.to_i
=> 1248933648

रेल के लिए आप उपयोग कर सकते हैं Time.zone.now.to_i। हालांकि यह रूप में एक ही ओ / p दे देंगे Time.now.to)_iलेकिन Time.zone.now.to_iहै Railsजिस तरह से।
स्वैप

रेल में, ./bin/rails runner "p Time.current.to_i"एक और समाधान है।
gipcompany


17

curl icanhazepoch.com

मूल रूप से यह एक सेवा के रूप में यूनिक्स टाइमस्टैम्प है (UTaaS)


3
हेह, अच्छा है। इसने मुझे अपने शौक साइट में एक समान सुविधा जोड़ने के लिए प्रेरित किया। curl -L -H "Accept: application/json" unixtimesta.mpआपको देगा{"datetime":"Thu, 19 Jul 2018 12:01:21 GMT","timestamp":1532001681}
क्रेग एंडरसन


8

यूनिक्स 'तारीख' कमांड आश्चर्यजनक रूप से बहुमुखी है।

तारीख -j -f "% a% b% d% T% Z% Y" "` तारीख `" "+% s"

का आउटपुट लेता है date, जो -f द्वारा परिभाषित प्रारूप में होगा, और फिर इसे प्रिंट करता है (-ज कहते हैं कि दिनांक + सेट करने का प्रयास न करें) +% s, सेकंड के बाद से।


4
date: invalid option -- 'j'
nyuszika7h

1
यह एक GNU डेट एक्सटेंशन है, जो यूनिक्स मानक (POSIX) में नहीं है।
जूलियाग्रे

8
$ date +%s.%N

जहां (GNU Coreutils 8.24 तारीख मैनुअल)

  • +%s, सेकंड्स 1970-01-01 से 00:00:00 यूटीसी
  • +%N, नैनोसेकंड (000000000..999999999) युग के बाद से

उदाहरण आउटपुट अब 1454000043.704350695। मैंने देखा कि बीएसडी मैनुअल dateने ध्वज के बारे में सटीक स्पष्टीकरण शामिल नहीं किया था +%s


आप नैनोसेकंड को क्यों शामिल करते हैं +$N? क्या यह कुछ प्रणालियों में UNIX टाइमस्टैम्प में शामिल है?
लेओ लेपोल्ड हर्ट्ज़ '

2
FYI करें, %Nने macOS 10.13.1 (हाई सिएरा) में तारीख के लिए मैन पेज को प्रलेखित नहीं किया है और काम नहीं करता है। मुझे जो नमूना आउटपुट मिला वह है 1523342391.N:।
निशांथ्स


7

सबसे पहले, यूनिक्स 'युग' या शून्य-काल 1970-01-01 00: 00: 00Z (जिसका अर्थ है 1 जनवरी 1970 की आधी रात को ज़ुलु या जीएमटी या यूटीसी समय क्षेत्र में)। एक यूनिक्स समय टिकट उस समय से सेकंड की संख्या है - लीप सेकंड के लिए लेखांकन नहीं।

पर्ल में वर्तमान समय उत्पन्न करना आसान है:

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

किसी दिए गए दिनांक / समय मान के अनुसार समय उत्पन्न करना कम आसान है। तार्किक रूप से, आप strptime()POSIX से फ़ंक्शन का उपयोग करते हैं । हालाँकि, पर्ल POSIX :: स्ट्रैप्टम मॉड्यूल (जो 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"'

4

पूर्णता के लिए, PHP:

php -r 'echo time();'

BASH में:

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

1
बैश के लिए हमारे पास पहले से ही dateकमांड है, इसलिए मुझे नहीं लगता कि वहां से php को कॉल करना आवश्यक है।
फेडोरक्वी 'SO रोकना नुकसानदायक'

3

में हास्केल

import Data.Time.Clock.POSIX

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

में जाओ

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

में सी

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

चलो जावास्क्रिप्ट का प्रयास करें :

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

... या यहां तक ​​कि अच्छे, स्थिर दृष्टिकोण:

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

दोनों मामलों में, मैं 1000सेकंड से मिलिस तक जाने के लिए विभाजित करता हूं और मैं Math.floorकेवल पूरे सेकंड का प्रतिनिधित्व करता हूं जो पास हो गए हैं (बनाम राउंडिंग, जो कि पूरे एक सेकंड तक गोल हो सकता है जो अभी तक पारित नहीं हुआ है)।


ये गलत है। दोनों विधियां millisecondsसेकंड नहीं लौटती हैं और यूनिक्स टाइमस्टैम्प seconds1 जनवरी, 1970 00:00 यूटीसी के बाद से समाप्त हो गई है। आप JS का उपयोग कर सकते हैं, बस 1000 और राउंड द्वारा विभाजित करें:Math.round(Date.now()/1000)
Lukas Liesis

1
@LukasLiesis उस दिन प्री-कॉफी रही होगी, मैंने अपना जवाब अपडेट कर दिया है, हालांकि मैंने Math.floorइसके बजाय चुना Math.round। चीयर्स
मैडब्रेक्स

0

यदि आपको शेल स्क्रिप्ट से एक यूनिक्स टाइमस्टैम्प की आवश्यकता है (बॉर्न परिवार: श, के, बश, ज़श, ...), तो यह किसी भी यूनिक्स मशीन पर अन्य सुझावों (पर्ल, हैसेल, रूबी, पायथन, जीएनयू तिथि) के विपरीत काम करना चाहिए। ), यह एक POSIX मानक कमांड और फीचर पर आधारित है।

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

0

बैश 5 में एक नया चर है:

echo $EPOCHSECONDS

या यदि आप उच्च परिशुद्धता चाहते हैं (माइक्रोसेकंड में):

echo $EPOCHREALTIME

0

अगर मैं डेट कमांड का उपयोग करके utc डेट टाइम प्रिंट करना चाहता हूं, तो मुझे तारीख कमांड के साथ -u तर्क का उपयोग करने की आवश्यकता है।

उदाहरण

date -u

उत्पादन

Fri Jun 14 09:00:42 UTC 2019

0

nawk:

$ nawk 'BEGIN{print srand()}'
  • सोलारिस और शायद अन्य यूनिक्स प्रणालियों के पुराने संस्करणों पर भी काम करता है, जहां '' दिनांक +% s '' लागू नहीं होता है
  • लिनक्स और अन्य डिस्ट्रोस पर काम नहीं करता है जहाँ पॉसिक्स टूल्स को GNU संस्करणों (nawk -> gkk) आदि से बदल दिया गया है।
  • बहुत अचूक लेकिन निश्चित रूप से मनोरंजक :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.