मैं एक युगांतरकारी टाइमस्टैम्प को एक मानव पठनीय प्रारूप में कैसे बदल सकता हूँ?


183

मैं एक युगांतरकारी टाइमस्टैम्प को एक मानव पठनीय प्रारूप में कैसे बदल सकता हूँ? मुझे लगता है कि तारीख के साथ ऐसा करने का एक तरीका है, लेकिन सिंटैक्स मुझे (अन्य तरीके से स्वागत करता है) एल्ड करता है।

जवाबों:


268

* बीएसडी पर:

date -r 1234567890

लिनक्स पर (विशेष रूप से, GNU कोरुटिल्स .35.3 के साथ):

date -d @1234567890

जीएनयू तिथि के पुराने संस्करणों के साथ, आप यूटीसी युग के सापेक्ष अंतर की गणना कर सकते हैं:

date -d '1970-01-01 UTC + 1234567890 seconds'

यदि आपको पोर्टेबिलिटी की आवश्यकता है, तो आप भाग्य से बाहर हैं। केवल एक बार जब आप POSIX शेल कमांड के साथ प्रारूपित कर सकते हैं (गणना स्वयं किए बिना) लाइन वर्तमान समय है। व्यवहार में, पर्ल अक्सर उपलब्ध होता है:

perl -le 'print scalar localtime $ARGV[0]' 1234567890

4
पोर्टेबिलिटी की कमी के बारे में टिप्पणी के लिए +1 (POSIX कल्पना में ऐसा करने का तरीका क्यों नहीं है? Grr)
रिचर्ड हैनसेन

3
में क्या @मतलब है date -d @1234567890? man dateउस के लिए कोई संदर्भ नहीं दिया ...
क्रिस मार्क

10
@ क्रिसमर्ले जीएनयू मैन पेज अक्सर अधूरे रूप से अधूरे होते हैं। "दिनांक स्ट्रिंग प्रारूप से आसानी से प्रलेखित है और अधिक जटिल है, लेकिन पूरी तरह से जानकारी दस्तावेज़ में वर्णित किया गया है।" बुद्धि के लिए: gnu.org/software/coreutils/manual/html_node/...
गाइल्स

2
info dateकाफी पूरा हो गया है। पर प्रविष्टि 28.9 Seconds since the Epoch@timestamp के बारे में विस्तार से बताती है।

एक पाइप में लिनक्स में: दिनांक + '% s' | xargs -I n date -d @n
इवान


14
$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e' 
Sun Sep 16 20:33:20 2007

यह उन अनुप्रयोगों के लिए काम में आ सकता है जो लॉगफ़ाइल्स में समय का उपयोग करते हैं:

$ tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
[Thu May 13 10:15:46 2010] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;HOSTA;check_raid;0;check_raid.pl: OK (Unit 0 on Controller 0 is OK)

11

GNU के साथ कस्टम प्रारूप date:

date -d @1234567890 +'%Y-%m-%d %H:%M:%S'

या GNU के साथ awk:

awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", 1234567890); }'

लिंक किए गए SO प्रश्न: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line


3
केवल GNU दिनांक और GNU awk के लिए काम करता है। न तो awk और न ही nkk समर्थन strftime।
DarkHeart

11

bash-4.2ऊपर या ऊपर के साथ :

printf '%(%F %T)T\n' 1234567890

( -type प्रारूप कहां %F %Tहै strftime())

वह वाक्य रचना से प्रेरित है ksh93

में ksh93हालांकि, तर्क एक तारीख अभिव्यक्ति जहां विभिन्न और शायद ही दस्तावेज प्रारूप समर्थित हैं के रूप में लिया जाता है।

यूनिक्स युग के समय के लिए, वाक्यविन्यास ksh93है:

printf '%(%F %T)T\n' '#1234567890'

ksh93हालांकि समयक्षेत्र के लिए अपने स्वयं के एल्गोरिथ्म का उपयोग करने लगता है और यह गलत हो सकता है। उदाहरण के लिए, ब्रिटेन में, 1970 में पूरे साल गर्मी का समय था, लेकिन:

$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan  1 00:00:00 1970

7

यदि आपका युग का समय सेकंड के बजाय मिलीसेकंड में है, तो इसे पास करने से पहले अंतिम तीन अंक हटा दें date -d:

$ date -d @1455086371603
Tue Nov  7 02:46:43 PST 48079     #Incorrect

इससे गलत डेटा मिलता है। अंतिम तीन अंक निकालें।

$ date -d @1455086371
Tue Feb  9 22:39:31 PST 2016      #Correct after removing the last three digits. You may remove and round off the last digit too.

क्या उपयोगिता प्रिंट में मिलीसेकंड (बिना बिंदी के) शामिल थे?

मैंने देखा है कि WebLogic Application सर्वर ज्यादातर स्क्रिप्टिंग टूल का उपयोग करते समय मिलीसेकंड और कोई डॉट्स के साथ डेटा टाइम मान देता है। जैसे, lastSuccessfulConnectionUse = 1455086371603
KnockTurnAl

समझा। यह पृष्ठ कच्चे समय के मूल्य को मिलीसेकंड में टाइमस्टैम्प की पुष्टि करता है । धन्यवाद।

एटलसियन उपकरण अपने टाइमस्टैम्प को मिलीसेकंड के साथ युग के रूप में लॉग करते हैं।
Br.Bill

6

दो मैं अक्सर उपयोग कर रहे हैं:

$ perl -leprint\ scalar\ localtime\ 1234567890
Sat Feb 14 00:31:30 2009

तथा

$ tclsh
% clock format 1234567890
Sa Feb 14 00:31:30 CET 2009

6

साथ zshआप इस्तेमाल कर सकते हैं strftimeनिर्मित:

strftime format epochtime
निर्दिष्ट प्रारूप में युगांतर 
      द्वारा निरूपित दिनांक को आउटपुट करें ।

जैसे

zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
शुक्रवार, 13 फरवरी 2009

वहाँ dateconvसे भी है dateutils:

dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
शुक्रवार, 13 फरवरी 2009

dateutilsडिफ़ॉल्ट टूल को ध्यान में रखें UTC( -z your/timezoneयदि आवश्यक हो तो जोड़ें)।


0

आप प्रारूप में डेटाइम को प्रिंट करने के लिए थोड़ा सी प्रोग्राम का उपयोग भी कर सकते हैं जो सीधे शेल द्वारा पार्स किया जा सकता है

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char * argv[]) {

    if (argc==1) { 
        return 1;
    }

    struct tm input_tm;
    char * formatStr  = "YEAR=%Y\nMON=%m\nDAY=%d\nHOUR=%H\nMIN=%M\nSEC=%S";
    size_t formatSize = strlen(formatStr) + 2;
    char * output     = (char *)malloc(sizeof(char)*formatSize);

    strptime(argv[1],"%s",&input_tm);
    strftime(output, formatSize, formatStr, &input_tm);

    printf("%s\n",output);
    free(output);
    return 0;
}

उपयोग:

#compile
clang -o epoch2datetime main.c

#invoke
eval `./epoch2datetime 1450196411`
echo $YEAR $MON $DAY $HOUR $MIN $SEC
#output
#2015 12 16 00 20 11

0

थोड़ा नोड के बिना एक वास्तविक समाधान नहीं होगा। js:

epoch2date(){
    node -p "new Date($1)"
}

इसे जोड़ें ~/.bash_aliasesऔर सुनिश्चित करें कि इसके ~/.bashrcसाथ खटास है. ~/.bash_aliases

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

अपने सिस्टम गोटो http://nvm.sh पर नोड प्राप्त करने और कर्ल कमांड चलाने के लिए। यह नोड संस्करण प्रबंधक (एनवीएम) स्थापित करेगा जो आपको नोड के संस्करणों को स्विच करने की अनुमति देता है।

बस टाइप करें nvm ls-remoteऔर एक संस्करण चुनें nvm install <version>


0

ऐसा करने का एक आसान तरीका है: ([(System.DateTimeOffset] :: FromUnixTimeMilliSeconds ($ unixtime))। DateTime) .ToString ("s")


U & L पर आपका स्वागत है! कृपया, प्रश्न के टैग पर एक नज़र डालें: क्या यह कोड कुछ यूनिक्स या यूनिक्स जैसी प्रणाली पर कुछ शेल में काम करता है?
फ्रा-सान

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