यूनिक्स टाइमस्टैम्प को डेट स्ट्रिंग में बदलें


128

क्या यूनिक्स कमांड लाइन से एक यूनिक्स टाइमस्टैम्प को तारीख में बदलने का एक त्वरित, एक-लाइनर तरीका है?

dateकाम कर सकता है, सिवाय इसके कि प्रत्येक तत्व (महीने, दिन, साल, घंटे, आदि) को निर्दिष्ट करने के लिए यह अजीब है, और मैं यह पता नहीं लगा सकता कि इसे ठीक से काम करने के लिए कैसे प्राप्त किया जाए। ऐसा लगता है कि एक आसान तरीका हो सकता है - क्या मुझे कुछ याद आ रहा है?


जवाबों:


181

GNU के साथ dateआप कर सकते हैं:

date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969

(से: BASH: यूनिक्स टाइमस्टैम्प को तिथि में बदलें )

ओएस एक्स पर, का उपयोग करें date -r

date -r "$TIMESTAMP"

वैकल्पिक रूप से, उपयोग करें strftime()। यह सीधे शेल से उपलब्ध नहीं है, लेकिन आप इसे gawk के माध्यम से एक्सेस कर सकते हैं । %cविनिर्देशक के लिए कोई स्थान निर्भर तरीके से टाइमस्टैम्प प्रदर्शित करता है।

echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST

3
टाइमस्टैम्प से मिलीसेकंड को समाप्त करना सुनिश्चित करें (जो कि 13 के बजाय केवल 10 अंक है), अन्यथा आपको अमान्य परिणाम मिलेंगे (यह macOS की तारीख के लिए सही है)।
एमरिनो

मुझे लगा कि यह काम नहीं कर रहा है, जब तक मुझे एहसास नहीं हुआ कि मेरे पास मिलिस में टाइमस्टैम्प है। पिछले 3 अंकों को काटें, और आपको सटीक समय मिलता है
स्टीवर्ट


24

यह समाधान तारीख के संस्करणों के साथ काम करता है जो समर्थन नहीं करते हैं date -d @। यह AWK या अन्य आदेशों की आवश्यकता नहीं है । 1 जुलाई, 1970 से यूनिक्स टाइमस्टैम्प सेकंड की संख्या है, इसलिए यूटीसी को निर्दिष्ट करना महत्वपूर्ण है।

date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012

यदि आप एक मैक पर हैं, तो उपयोग करें:

date -r 1357004952

युग प्राप्त करने की आज्ञा:

date +%s
1357004952

क्रेडिट एंटोन को जाता है: BASH: यूनिक्स टाइमस्टैम्प को डेट में कन्वर्ट करें


10

जैसा कि @TomMcKenzie किसी अन्य उत्तर के लिए एक टिप्पणी में कहता है, date -r 123456789 यकीनन यूनिक्स एपोच के बाद से सेकंड के रूप में दिए गए समय के लिए एक अधिक सामान्य (यानी अधिक व्यापक रूप से लागू) सरल समाधान है, लेकिन दुर्भाग्य से कोई सार्वभौमिक गारंटीकृत पोर्टेबल समाधान नहीं है।

-dप्रणालियों के कई प्रकार पर विकल्प कुछ जीएनयू तिथि की तुलना में पूरी तरह से अलग अर्थ है --dateविस्तार। अफसोस की बात है कि GNU दिनांक -rइन अन्य कार्यान्वयन के समान नहीं है। तो दुर्भाग्य से आपको यह जानना होगा कि dateआप किस संस्करण का उपयोग कर रहे हैं, और कई पुराने यूनिक्स dateकमांड या तो विकल्प का समर्थन नहीं करते हैं।

इससे भी बदतर, POSIX dateन तो पहचानता है और न -dही -rकिसी भी कमांड में कोई मानक तरीका प्रदान करता है (जो मुझे पता है) कमांड लाइन से एक यूनिक्स समय को प्रारूपित करने के लिए (क्योंकि POSIX Awk में भी कमी है strftime())। (आप उपयोग नहीं कर सकते touch -tऔर lsक्योंकि पूर्व यूनिक्स एपोच के बाद से सेकंड के रूप में दिए गए समय को स्वीकार नहीं करता है।)

ध्यान दें कि ब्रायन कर्निघन से उपलब्ध द वन ट्रू अवेक अब है strftime() फंक्शन बिल्ट-इन के साथ-साथ systime()यूनिक्स एपोच के बाद से सेकंड में मौजूदा समय को वापस करने का फंक्शन है), इसलिए शायद अवाक सॉल्यूशन सबसे पोर्टेबल है।


4

यदि आप नोटेशन को अजीब पाते हैं, तो शायद- -Rदत्तक मदद करता है। यह RFC 2822 फॉर्मेट में तारीख निकलती है। तो आपको उन सभी पहचानकर्ताओं की आवश्यकता नहीं होगी date -d @1278999698 -R:। एक अन्य संभावना यह है कि आपके लोकेल में सेकंड में दिनांक आउटपुट करें date -d @1278999698 +%c:। याद रखना आसान होना चाहिए। :-)


2

ऊपर dabest1 के उत्तर के लिए थोड़ा सुधार। UTC के रूप में टाइमज़ोन निर्दिष्ट करें, GMT नहीं:

$ date -d '1970-01-01 1416275583 sec GMT'
Tue Nov 18 00:53:03 GMT 2014
$ date -d '1970-01-01 1416275583 sec UTC'
Tue Nov 18 01:53:03 GMT 2014

दूसरा सही है। मुझे लगता है कि इसका कारण यह है कि ब्रिटेन में, डेलाइट सेविंग 1968 से 1971 तक लगातार लागू थी।




1

यहां अन्य उदाहरणों को याद रखना मुश्किल है। सबसे सरल:

date -r 1305712800

मिश्रित परिणाम: उबंटू लिनक्स में काम नहीं करता है, लेकिन उदाहरण के लिए मैक ओएस एक्स में करता है।
माइक क्यू

1

निम्नलिखित को अपने ~ / .bashrc में रखें:

function unixts() { date -d "@$1"; }

उदाहरण उपयोग:

$ unixts 1551276383

Wed Feb 27 14:06:23 GMT 2019

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