তারিখের সময়ের স্ট্রিংটি নিম্নলিখিত ফর্ম্যাটে রয়েছে: 06/12/2012 07:21:22 :22 আমি কীভাবে এটিকে ইউনিক্স টাইমস্ট্যাম্প বা যুগের মধ্যে রূপান্তর করতে পারি?
তারিখের সময়ের স্ট্রিংটি নিম্নলিখিত ফর্ম্যাটে রয়েছে: 06/12/2012 07:21:22 :22 আমি কীভাবে এটিকে ইউনিক্স টাইমস্ট্যাম্প বা যুগের মধ্যে রূপান্তর করতে পারি?
উত্তর:
আপনি যা খুঁজছেন তা হ'ল date --date='06/12/2012 07:21:22' +"%s"
। মনে রাখবেন যে এটি ধরে নিয়েছে যে আপনি জিএনইউ কোর্টিলগুলি ব্যবহার করছেন, কারণ উভয় --date
এবং %s
বিন্যাসের স্ট্রিংই জিএনইউ এক্সটেনশন। পসিক্স সেগুলির মধ্যে একটিও নির্দিষ্ট করে না, সুতরাং পসিক্স কমপ্লায়েন্ট সিস্টেমগুলিতে এমন রূপান্তর করার কোনও পোর্টেবল উপায় নেই।
এর অন্যান্য সংস্করণগুলির জন্য উপযুক্ত ম্যানুয়াল পৃষ্ঠায় পরামর্শ করুন date
।
নোট: ব্যাশ --date
এবং -d
বিকল্প মার্কিন যুক্তরাষ্ট্র বা ISO8601 ফরম্যাট, অর্থাত তারিখ আশা mm/dd/yyyy
বা yyyy-mm-dd
যুক্তরাজ্য, ইউরোপীয় ইউনিয়নের, বা অন্য কোন ফর্ম্যাটে নেই।
+"%s"
আউটপুট ফর্ম্যাট এবং দাঁড়ায় %s
1970 এর পর থেকে সেকেন্ডে সময়ের ফর্ম্যাট
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"
ম্যাক ওএসএক্সের জন্য এই কমান্ডটি চালান
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
এটি অবশ্যই বর্তমান ইউনিক্সটাইম আউটপুট করে । সেখান থেকে, আপনি তুলনা করতে পারে
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
Seconds সেকেন্ডেরও কম থেকে সাড়ে সেকেন্ডের কম !! (আমার হোস্টে)
আপনি পরীক্ষা পারে 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
আপনি এগুলিকে গিটহাবের বিভিন্ন সংস্করণে বা আমার সাইটে খুঁজে পেতে পারেন: ডাউনলোড করুন বা শো করুন ।
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"
তবে আপনি যদি ইচ্ছাকৃতভাবে ইউটিসি ডেটটাইমটি পাস করতে চান এবং আপনি উপযুক্ত সময় অঞ্চল চান তবে আপনার -u
পতাকা লাগাতে হবে। অন্যথায় আপনি এটিকে আপনার স্থানীয় সময় অঞ্চল থেকে রূপান্তর করেন।
date -u -d "$datetime" +"%s" #general output = "1339485682"
date
এই ইনপুটটি সঠিকভাবে ফর্ম্যাট করে।