मैं एक युगांतरकारी टाइमस्टैम्प को एक मानव पठनीय प्रारूप में कैसे बदल सकता हूँ? मुझे लगता है कि तारीख के साथ ऐसा करने का एक तरीका है, लेकिन सिंटैक्स मुझे (अन्य तरीके से स्वागत करता है) एल्ड करता है।
मैं एक युगांतरकारी टाइमस्टैम्प को एक मानव पठनीय प्रारूप में कैसे बदल सकता हूँ? मुझे लगता है कि तारीख के साथ ऐसा करने का एक तरीका है, लेकिन सिंटैक्स मुझे (अन्य तरीके से स्वागत करता है) एल्ड करता है।
जवाबों:
* बीएसडी पर:
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
@
मतलब है date -d @1234567890
? man date
उस के लिए कोई संदर्भ नहीं दिया ...
info date
काफी पूरा हो गया है। पर प्रविष्टि 28.9 Seconds since the Epoch
@timestamp के बारे में विस्तार से बताती है।
$ 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)
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
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
यदि आपका युग का समय सेकंड के बजाय मिलीसेकंड में है, तो इसे पास करने से पहले अंतिम तीन अंक हटा दें 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.
साथ 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
यदि आवश्यक हो तो जोड़ें)।
आप प्रारूप में डेटाइम को प्रिंट करने के लिए थोड़ा सी प्रोग्राम का उपयोग भी कर सकते हैं जो सीधे शेल द्वारा पार्स किया जा सकता है
#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
थोड़ा नोड के बिना एक वास्तविक समाधान नहीं होगा। 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>
।
ऐसा करने का एक आसान तरीका है: ([(System.DateTimeOffset] :: FromUnixTimeMilliSeconds ($ unixtime))। DateTime) .ToString ("s")