दिनांक समय स्ट्रिंग निम्न प्रारूप में है: 06/12/2012 07:21:22। मैं इसे UNIX टाइमस्टैम्प या युग में कैसे बदल सकता हूं?
दिनांक समय स्ट्रिंग निम्न प्रारूप में है: 06/12/2012 07:21:22। मैं इसे UNIX टाइमस्टैम्प या युग में कैसे बदल सकता हूं?
जवाबों:
आप जो खोज रहे हैं, वह है date --date='06/12/2012 07:21:22' +"%s"। ध्यान रखें कि यह आप GNU कोरुटिल्स का उपयोग कर रहे हैं, क्योंकि दोनों --dateऔर %sप्रारूप स्ट्रिंग GNU एक्सटेंशन हैं। POSIX उन दोनों में से किसी को भी निर्दिष्ट नहीं करता है, इसलिए POSIX अनुरूप सिस्टम पर भी इस तरह के रूपांतरण करने का कोई पोर्टेबल तरीका नहीं है।
के अन्य संस्करणों के लिए उपयुक्त मैनुअल पेज से परामर्श करें date।
नोट: बैश --dateऔर -dविकल्प यूएस या ISO8601 प्रारूप में तारीख की अपेक्षा करता है, यानी mm/dd/yyyyया yyyy-mm-dd, यूके, ईयू या किसी अन्य प्रारूप में नहीं।
+"%s"उत्पादन प्रारूप के लिए खड़ा है और %s1970 के बाद से है सेकंड में समय का स्वरूप
date --date='06/12/2012 07:21:22 -0000' +"%s"यूटीसी की तारीख को यूनिक्स टाइम स्टैम्प में परिवर्तित कर देता है
yyyy-mm-dd hh:mm:ss पर एक नज़र है :gdate --date='2019-06-18 00:02:00 +0000' +%s
लिनक्स के लिए इस कमांड को रन करें
date -d '06/12/2012 07:21:22' +"%s"
Mac OSX के लिए यह कमांड चलाएँ
date -j -u -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"
-uध्वज को जोड़ने से इसे ठीक करना चाहिए।
-uझंडा आना चाहिए से पहले-f या फिर खोल व्याख्या झंडा, यह प्रारूप स्ट्रिंग। तो, यह होना चाहिए:date -j -u -f "%a..."
date -jf "%Y-%m-%d %H:%M:%S" "2018-01-08 14:45:00" +%s
इनमें से बहुत से उत्तर अत्यधिक जटिल हैं और यह भी गायब है कि चर का उपयोग कैसे करें। यह है कि आप इसे मानक लिनक्स सिस्टम पर अधिक कैसे करेंगे (जैसा कि पहले उल्लेख किया गया था कि मैक उपयोगकर्ताओं के लिए तारीख कमांड को समायोजित करना होगा):
नमूना स्क्रिप्ट:
#!/bin/bash
orig="Apr 28 07:50:01"
epoch=$(date -d "${orig}" +"%s")
epoch_to_date=$(date -d @$epoch +%Y%m%d_%H%M%S)
echo "RESULTS:"
echo "original = $orig"
echo "epoch conv = $epoch"
echo "epoch to human readable time stamp = $epoch_to_date"
का परिणाम :
RESULTS:
original = Apr 28 07:50:01
epoch conv = 1524916201
epoch to human readable time stamp = 20180428_075001
या एक समारोह के रूप में:
# -- Converts from human to epoch or epoch to human, specifically "Apr 28 07:50:01" human.
# typeset now=$(date +"%s")
# typeset now_human_date=$(convert_cron_time "human" "$now")
function convert_cron_time() {
case "${1,,}" in
epoch)
# human to epoch (eg. "Apr 28 07:50:01" to 1524916201)
echo $(date -d "${2}" +"%s")
;;
human)
# epoch to human (eg. 1524916201 to "Apr 28 07:50:01")
echo $(date -d "@${2}" +"%b %d %H:%M:%S")
;;
esac
}
get_curr_date () {
# get unix time
DATE=$(date +%s)
echo "DATE_CURR : "$DATE
}
conv_utime_hread () {
# convert unix time to human readable format
DATE_HREAD=$(date -d @$DATE +%Y%m%d_%H%M%S)
echo "DATE_HREAD : "$DATE_HREAD
}
date रूप में कुशल समाधानआदेश में अनुवाद के इस तरह के एक बहुत तेज ...
इस पोस्ट में, आप पाएंगे
bc, rot13, sed...)।fifo=$HOME/.fifoDate-$$
mkfifo $fifo
exec 5> >(exec stdbuf -o0 date -f - +%s >$fifo 2>&1)
echo now 1>&5
exec 6< $fifo
rm $fifo
read -t 1 -u 6 now
echo $now
यह वर्तमान UNIXTIME आउटपुट होना चाहिए । वहाँ से, आप तुलना कर सकते हैं
time for i in {1..5000};do echo >&5 "now" ; read -t 1 -u6 ans;done
real 0m0.298s
user 0m0.132s
sys 0m0.096s
तथा:
time for i in {1..5000};do ans=$(date +%s -d "now");done
real 0m6.826s
user 0m0.256s
sys 0m1.364s
6 सेकंड से अधिक से आधे से भी कम समय तक !! (मेरे मेजबान पर)
आप देख सकते हैं echo $ans, "now"द्वारा प्रतिस्थापित किया जा सकता है"2019-25-12 20:10:00" और इतने पर ...
वैकल्पिक रूप से, आप कर सकते हैं, एक बार दिनांक सबप्रोसेस की आवश्यकता समाप्त हो गई:
exec 5>&- ; exec 6<&-
परिवर्तित करने के लिए 1 कांटा चलाने के बजाय , dateकेवल 1 बार चलाएं और सभी रूपांतरण एक ही प्रक्रिया से करें (यह बहुत जल्दी बन सकता है !::
date -f - +%s <<eof
Apr 17 2014
May 21 2012
Mar 8 00:07
Feb 11 00:09
eof
1397685600
1337551200
1520464020
1518304140
नमूना:
start1=$(LANG=C ps ho lstart 1)
start2=$(LANG=C ps ho lstart $$)
dirchg=$(LANG=C date -r .)
read -p "A date: " userdate
{ read start1 ; read start2 ; read dirchg ; read userdate ;} < <(
date -f - +%s <<<"$start1"$'\n'"$start2"$'\n'"$dirchg"$'\n'"$userdate" )
तो अब एक नज़र:
declare -p start1 start2 dirchg userdate
(कुछ उत्तर दे सकते हैं जैसे:
declare -- start1="1518549549" declare -- start2="1520183716" declare -- dirchg="1520601919" declare -- userdate="1397685600"
यह एक निष्पादन में किया गया था!
हमें बस एक फिफ्टी चाहिए :
mkfifo /tmp/myDateFifo
exec 7> >(exec stdbuf -o0 /bin/date -f - +%s >/tmp/myDateFifo)
exec 8</tmp/myDateFifo
rm /tmp/myDateFifo
(नोट: जैसा कि प्रक्रिया चल रही है और सभी डिस्क्रिप्टर खोले गए हैं, हम सुरक्षित रूप से फीफो की फाइल सिस्टम प्रविष्टि को हटा सकते हैं।)
तो अब:
LANG=C ps ho lstart 1 $$ >&7
read -u 8 start1
read -u 8 start2
LANG=C date -r . >&7
read -u 8 dirchg
read -p "Some date: " userdate
echo >&7 $userdate
read -u 8 userdate
हम एक छोटे से समारोह में भाग ले सकते हैं:
mydate() {
local var=$1;
shift;
echo >&7 $@
read -u 8 $var
}
mydate start1 $(LANG=C ps ho lstart 1)
echo $start1
newConnector फ़ंक्शन का उपयोग करेंसाथ कार्यों के लिए जोड़ने MySQL/MariaDB , PostgreSQLऔरSQLite ...
आप उन्हें GitHub , या मेरी साइट पर अलग-अलग संस्करण में पा सकते हैं : डाउनलोड या शो ।
wget https://raw.githubusercontent.com/F-Hauri/Connector-bash/master/shell_connector.bash
. shell_connector.bash
newConnector /bin/date '-f - +%s' @0 0
myDate "2018-1-1 12:00" test
echo $test
1514804400
नोटा: पर GitHub , कार्यों और परीक्षण फ़ाइलों अलग होती है। पर मेरी साइट परीक्षण बस चलाए जा रहे हैं पर यह स्क्रिप्ट नहीं है sourced ।
# Exit here if script is sourced
[ "$0" = "$BASH_SOURCE" ] || { true;return 0;}
बस सुनिश्चित करें कि आप किस टाइमजोन का उपयोग करना चाहते हैं।
datetime="06/12/2012 07:21:22"
सबसे लोकप्रिय उपयोग मशीन टाइमज़ोन लेता है।
date -d "$datetime" +"%s" #depends on local timezone, my output = "1339456882"
लेकिन अगर आप जानबूझकर UTC डेटाटाइम पास करना चाहते हैं और आप उचित टाइमज़ोन चाहते हैं, तो आपको -uध्वज जोड़ना होगा । अन्यथा आप इसे अपने स्थानीय समयक्षेत्र से परिवर्तित करते हैं।
date -u -d "$datetime" +"%s" #general output = "1339485682"
dateइस इनपुट को ठीक से प्रारूपित करता है।