टर्मिनल में युग के बाद से मिलीसेकंड में समय


42

मुझे ओएसएक्स टर्मिनल में, युगों के बाद से, मिलीसेकंड में समय कैसे मिलता है?

Linux / Ubuntu समकक्ष है date +%s.%N:

Linux $ date +%s.%N
1403377762.035521859

जो मेरे OSX टर्मिनल में काम नहीं करता है:

OSX $ date +%s.%N
1403377800.N

जवाबों:


48

dateओएस एक्स में कार्यक्रम जीएनयू के coreutils तुलना में अलग है dateकार्यक्रम। आप कोरुटिल्स (ग्नू-डेट सहित) स्थापित कर सकते हैं, फिर आपके पास dateमिलिसेकंड का समर्थन करने वाला एक संस्करण होगा ।

जैसा कि स्रोत से इंस्टॉलेशन देशी OS X उपयोगकर्ताओं के लिए एक परेशानी हो सकती है, मैं आपको Homebrew का उपयोग करने की सलाह देता हूं ।

Homebrew का उपयोग करके इन उपकरणों को स्थापित करने के लिए इस टर्मिनल पर अपने टर्मिनल में चलाएं:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew अब स्थापित हो गया है (स्थापना के बाद इंस्टॉलर के सुझावों का पालन करना बुद्धिमान है)। अब हम का उपयोग कर coreutils स्थापित करेंगे brew

brew install coreutils

जैसा कि अधिष्ठापन कहता है, सभी कमांड उपसर्ग 'जी' (उदाहरण के लिए gdate, gcat, gln, आदि) के साथ स्थापित किए गए हैं। यदि आपको वास्तव में इन आदेशों को उनके सामान्य नामों के साथ उपयोग करने की आवश्यकता है, तो आप अपने पेटीएम में "gnubin" निर्देशिका जोड़ सकते हैं ~/.bash_profile:

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

अब आप चला सकते हैं

gdate +%s.%N

और यह आपके समय को मिलीसेकंड में युग के बाद से आउटपुट करेगा।


3
अच्छा लगा। मुझे पथ जोड़ना नहीं gdateथा , में स्थापित किया गया था /usr/local/bin/gdate
एडम मटन

आपसे यही उम्मीद होगी। सभी बायनेरिज़ जी उपसर्ग के साथ स्थापित हैं। पथ में मैंने सभी समान गनु-कोरुटिल प्रदान किए हैं जो जी उपसर्ग के बिना हैं। इसलिए यदि आप इसे अपने पथ जैसे PATH = "/ usr / local / opt / coreutils / libexec / gnubin: $ PATH" में जोड़ते हैं तो यह मूल को बदल देगा। तो OS X dateGNU बन जाता है date(gdate के बजाय)
CousinCocaine

ठीक है कि यह काम किया।
कजिनकोकिन

3
तकनीकी रूप से, +%s.%Nप्रारूप सेकंड को नैनोसेकंड परिशुद्धता के नीचे देता है, मिलीसेकंड को नहीं। स्थापित करने के लिए काढ़ा का उपयोग करने के बाद gdate, मैंने यह देखने के लिए मेन्यू की जाँच की कि क्या मिलीसेकंड उपलब्ध था। यह। यह भी नहीं कहा कि के लिए एक सटीक %Nनिर्दिष्ट किया जा सकता है, लेकिन मैं इसे वैसे भी करने की कोशिश की। मैंने पाया कि सेकंड को केवल मिलीसेकंड सटीक तक पहुँचाने का कमांड (यानी, तीन दशमलव स्थान) है gdate +%s.%3N
एलएस

10

ओएस एक्स में, बस date +%sओएस एक्स के रूप में चलाएं यह किसी भी अधिक सटीक का dateआउटपुट से समर्थन नहीं करता है और आंतरिक प्रतिनिधित्व द्वारा समर्थित किसी भी अतिरिक्त परिशुद्धता को माइनस इनफिनिटी की ओर कम नहीं किया जाता है।

यदि आप मिलीसेकंड आउटपुट चाहते हैं, तो आप निम्न कमांड का उपयोग कर सकते हैं, हालांकि पूर्वोक्त कारण के कारण सटीक जोड़ने के बजाय आउटपुट को केवल शून्य जोड़कर ठीक किया जाता है। निम्नलिखित सिस्टम पर सटीक मिलीसेकंड का उत्पादन करता है जो आवश्यक परिशुद्धता का समर्थन करता है।

echo $(($(date +'%s * 1000 + %-N / 1000000')))

उपरोक्त आदेश के लिए स्रोत: यूनिक्स। ई - यूनिक्स युग के बाद से मिलीसेकंड कैसे प्राप्त करें

यदि आप बस एक आदेश चाहते हैं जो ओएस एक्स में शून्य की सही संख्या को जोड़ दे, तो आप उपयोग कर सकते हैं:

date +%s000

OS X समर्थन नहीं करता है %-N, इसलिए यह कुछ भी नहीं करता है (और शेल चर $Nसेट होने पर परेशानी पैदा कर सकता है)। बस का उपयोग करें date +%s000(या date +%s.000यदि आप दशमलव बिंदु चाहते हैं)।
गॉर्डन डेविसन

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

ओह समझा। लेकिन चूंकि OS X की dateकमांड बस के %-Nरूप में गुजरती है N, यह गणना में हस्तक्षेप कर सकती है। सेटिंग का प्रयास करें N=7000000000000000000, फिर कमांड का प्रयास करें ... यह व्यवहार में एक असंभावित मामला है, लेकिन मैं कुछ ऐसा महसूस करूंगा जो पर्यावरण पर निर्भर नहीं था।
गॉर्डन डेविसन

@Gordon दरअसल, वैरिएबल सेट करना इसे तोड़ देगा- मुझे लगता है कि कमांड चलने से पहले विशिष्ट वैरिएबल को रीसेट किया जा सकता है, लेकिन वैरिएबल को रीसेट करना जैसे कि हर अच्छी स्क्रिप्ट को वैसे भी कमांड चलाने से पहले करना चाहिए, imo, बस मामले में। बेशक, यह सब मेरी धारणा पर आधारित है कि ओपी एक स्क्रिप्ट-संपादित जवाब चाहता है जिसमें शून्य के शाब्दिक जोड़ शामिल हैं।
GRG

2
ओपी ने "युगों के बाद का समय, मिलीसेकंड में" के लिए कहा, यह एक स्ट्रिंग में शून्य को जोड़ने के तरीके पर एक उत्तर है। एक ही नहीं। हालांकि पोस्ट में समझाया गया, सवाल का जवाब नहीं।
कज़िन कोकीन

6

यह समाधान macOS पर काम करता है।

यदि आप बैश स्क्रिप्ट का उपयोग करने पर विचार करते हैं और अजगर उपलब्ध है, तो आप इस कोड का उपयोग कर सकते हैं:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

या pythonसीधे एक स्क्रिप्ट लिखें :

#!/usr/bin/python

from time import time
print int(round(time() * 1000)) 

4

पर्ल सर्वव्यापी है।

$ perl -MTime::HiRes=time -e 'printf "%.9f\n", time'
1557390839.244920969
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.