सवाल बैश में मिलीसेकंड में वर्तमान यूनिक्स समय कैसे प्राप्त करें?


मैं वर्तमान यूनिक्स समय को मिलीसेकंड में कैसे प्राप्त करूं (यानी यूनिक्स युग 1 जनवरी 1 9 70 के बाद से मिलीसेकंड की संख्या)?


197
2018-06-14 16:04


मूल




जवाब:


इस:

date +%s 

की संख्या वापस कर देगा सेकंड युग के बाद से।

इस:

date +%s%N

सेकंड और वर्तमान नैनोसेकंड देता है।

इसलिए:

date +%s%N | cut -b1-13

युग के बाद से आप मिलीसेकंड की संख्या देंगे - वर्तमान सेकंड और नैनोसेकंड के बाएं तीन।


और यहां ये MikeyB - echo $(($(date +%s%N)/1000000)) (1000 से विभाजित केवल माइक्रोसेकंड लाता है)


233
2018-06-14 16:10



मुझे आश्चर्य है कि कट कितने एमएस कहते हैं :-) - Kyle Brandt♦
या यदि आप इसे खोल में करना चाहते हैं, तो अतिरिक्त प्रक्रिया के महंगी ओवरहेड से बचें (असल में, हम समस्या से परहेज कर रहे हैं जब% + s + N में अंकों की संख्या बदलती है): echo $(($(date +%s%N)/1000)) - MikeyB
यह इस मामले का सिद्धांत है ... जादू संख्याओं और कोड से बचें जो आप वास्तव में करते हैं मतलब। - MikeyB
मुझे लगता है कि यह ध्यान देने योग्य है कि आदमी ने यूनिक्स के लिए पूछा, लिनक्स नहीं, और वर्तमान शीर्ष उत्तर (दिनांक +% s% एन) मेरे AIX सिस्टम पर काम नहीं करता है। - Pete
@Pete +1 ओएस एक्स, और फ्रीबीएसडी के लिए समान है - ocodo


आप बस उपयोग कर सकते हैं %3N नैनोसेकंड को 3 सबसे महत्वपूर्ण अंकों (जो तब मिलीसेकंड हैं) में छिड़कने के लिए:

$ date +%s%3N
1397392146866

यह काम करता है उदा। मेरे कुबंटू 12.04 पर।

लेकिन जागरूक रहो, कि %N आपके लक्ष्य तंत्र के आधार पर लागू नहीं किया जा सकता है। जैसे एक एम्बेडेड सिस्टम पर परीक्षण किया गया (buildroot rootfs, एक गैर-एचएफ बांह क्रॉस टूलचेन का उपयोग करके संकलित) कोई नहीं था %N:

$ date +%s%3N
1397392146%3N

(और मेरे (गैर रूट) एंड्रॉइड टैबलेट में भी नहीं है %N)।


79
2018-04-13 12:34



@warren: मैंने देखा कि आपने संपादित और बदल दिया है 1397392146%3N सेवा मेरे 1397392146%N, लेकिन का उत्पादन 1397392146%3N यह है कि मैं अपने एंड्रॉइड टैबलेट के व्यस्त बॉक्स कंसोल पर वास्तव में क्या देखता था। क्या आप अपना संपादन समझा सकते हैं? - Joe
इतिहास से वॉरेन की टिप्पणी "3 से 6 में बदल दी गई है, क्योंकि 3 केवल आपको माइक्रोसेकंड में ले जाती है"। उनका संपादन पूरी तरह से नकली लगता है; आपको इसे वापस रोल करना चाहिए। - bukzor
यह विशेष रूप से जीएनयू कोर्यूटिल्स की एक विशेषता है। आखिरकार, यह यहां gnulib में लागू किया गया है: github.com/gagern/gnulib/blob/...। - telotortium
शायद वहां एक बिंदु समझ में आता है। date +%s.%3N प्रिंट 1510718281.134। - darksky


date +%N ओएस एक्स पर काम नहीं करता है, लेकिन आप इनमें से एक का उपयोग कर सकते हैं

  • माणिक: ruby -e 'puts Time.now.to_f'
  • अजगर: python -c 'import time; print time.time()'
  • Node.js: node -e 'console.log(Date.now())'
  • पीएचपी: php -r 'echo microtime(TRUE);'
  • internets: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
  • या मिलीसेकंड के लिए निकटतम दूसरे के लिए गोलाकार date +%s000

51
2017-09-02 11:16



संपूर्णता के लिए... node -e 'console.log(Date.now())' - slf
PHP का उपयोग करना: php -r 'echo microtime(TRUE);' - TachyonVortex
निश्चित रूप से, आपको बस उन दुभाषियों को गर्म करने के लिए इंतजार करना होगा। यह भी काम करता है: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N - Camilo Martin
या, यदि आप वास्तव में मिलीसेकंड की आवश्यकता नहीं है लेकिन सिर्फ सही प्रारूप: date +%s000 - Lenar Hoyt
apple.stackexchange.com/questions/135742/... ब्रू के माध्यम से ओएसएक्स में ऐसा करने के लिए निर्देश हैं coreutils - sameers


बस इसे बाहर फेंक दो, लेकिन मुझे लगता है कि विभाजन के साथ सही सूत्र होगा:

echo $(($(date +%s%N)/1000000))

8
2017-09-07 21:22





मेरा समाधान सबसे अच्छा नहीं है लेकिन मेरे लिए काम किया है।

date +%s000

मुझे बस 2012-05-05 से मिलीसेकंड की तारीख को बदलने की जरूरत है।


6
2018-05-09 20:11



अद्भुत हैक, लॉल :) - k06a
आप मेरे सहकर्मियों में से एक होना चाहिए। - Nakilon


उन लोगों के लिए जो बाहरी कार्यक्रम चलाने के लिए सुझाव देते हैं मिलीसेकेंड ... उस दर पर, आप यह भी कर सकते हैं:

wget -qO- http://www.timeapi.org/utc/now?\\s.\\N

प्वाइंट होने: यहां से कोई जवाब लेने से पहले, कृपया ध्यान रखें कि सभी कार्यक्रम एक दूसरे के तहत नहीं चलेंगे। उपाय!


6
2018-06-23 13:17



आप उस समय के लिए स्थानीय प्रणाली नहीं पूछ रहे हैं। जो मुझे लगता है कि इस सवाल में निहित है। आप नेटवर्क कनेक्शन पर भी निर्भर करते हैं। - orkoden
@orkoden प्रश्न स्पष्ट रूप से "यूनिक्स युग 1 जनवरी 1 9 70 के बाद से मिलीसेकंड की संख्या" के लिए पूछता है। साथ ही, मैं यह इंगित करने के बारे में अधिक सोच रहा हूं कि आपको समय प्राप्त करने के लिए पूरी तरह से रूबी या पायथन (या wget) को कैसे नहीं आग लगाना चाहिए - या तो यह एक तेज चैनल या मिलीसेकंड के माध्यम से किया जाता है इससे कोई फर्क नहीं पड़ता। - Camilo Martin
हां, मुझे समझ में आया कि आप खराब समाधान की त्रुटियों को उजागर करने के लिए एक खराब समाधान दे रहे थे। मैंने कई समाधानों की कोशिश की और समय माप लिया। lpaste.net/119499 परिणाम दिलचस्प हैं। एक बहुत तेजी से i7 मशीन पर भी date चलाने के लिए 3 एमएस लेता है। - orkoden
@orkoden अच्छा परीक्षण! क्या ओएस? इसे ओवरहेड स्पॉइंग प्रक्रिया के साथ करना पड़ सकता है। - Camilo Martin
@ नकिनॉन और यही कारण है कि किसी को भी उत्पादन के लिए कर्ल-सक्षम सुविधाओं पर भरोसा नहीं करना चाहिए। - Camilo Martin


यह समाधान मैकोज़ पर काम करता है।

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

#!/bin/bash

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

3
2018-02-05 14:26



नीचे वोट क्यों? - Frank Thonig
विशेष रूप से उचित नहीं लग रहा है। नीचे तीर पर संकेत कहता है "यह जवाब उपयोगी नहीं है", लेकिन आईएमओ यह उपयोगी है। शायद वे चाहते थे कि आप इसे इसके बजाय एक पायथन स्क्रिप्ट बनाना चाहते हैं। यह आसान होगा और बैश कमांड के रूप में भी ठीक काम करेगा। - Andrew Schulman
डाउनवोट्स के बारे में ज्यादा चिंता न करें (यह मेरा नहीं था) ... विशेष रूप से यदि वे अज्ञात हैं (जिससे कोई नहीं सीख सकता कि क्या गलत लगता है, है ना?)। बस आपको इसे संसाधित करने के लिए ... यहां एक और +1 चला जाता है ... अनुमान लगाएं: आपको अब "वोट" करने की भी अनुमति है, है ना? - Pierre.Vriens
प्रतीत होता है कि डाउनवॉइंट सिस्टम के साथ किसी समस्या के कारण हुआ है। इसे तब से हटा दिया गया है, फिर से सिस्टम द्वारा। - Michael Hampton♦


यदि आप अपनी स्क्रिप्ट चलाने की अवधि प्रदर्शित करने के लिए एक तरीका ढूंढ रहे हैं, तो निम्न परिणाम (बिल्कुल सटीक नहीं) परिणाम प्रदान करेगा:

जैसा कि आप कर सकते हैं अपनी स्क्रिप्ट की शुरुआत के करीब, निम्न दर्ज करें

basetime=$(date +%s%N)

यह आपको 1361802943996000000 जैसे कुछ का प्रारंभिक मूल्य देगा

अपनी स्क्रिप्ट के अंत में, निम्न का उपयोग करें

echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"

जो कुछ प्रदर्शित करेगा

runtime: 12.383 seconds

टिप्पणियाँ:

(1 * 10 ^ 09) यदि आप चाहें तो 1000000000 के साथ प्रतिस्थापित किया जा सकता है

"scale=3" एक दुर्लभ सेटिंग है जो coerces है bc जो करना चाहते हैं उसे करने के लिए। बहुत कुछ हैं!

मैंने केवल Win7 / MinGW पर इसका परीक्षण किया ... मेरे पास हाथ में उचित * निक्स बॉक्स नहीं है।


2
2018-02-25 14:48



या आप बस उपयोग कर सकते हैं time <script> - warren