আমার মতো সাধারণ কিছু দরকার date
, তবে বর্তমান তারিখ, ঘন্টা, মিনিট এবং সেকেন্ডের পরিবর্তে 1970 থেকে সেকেন্ডে।
date
মনে হয় না যে বিকল্পটি অফার করে। একটি সহজ উপায় আছে কি?
আমার মতো সাধারণ কিছু দরকার date
, তবে বর্তমান তারিখ, ঘন্টা, মিনিট এবং সেকেন্ডের পরিবর্তে 1970 থেকে সেকেন্ডে।
date
মনে হয় না যে বিকল্পটি অফার করে। একটি সহজ উপায় আছে কি?
উত্তর:
এই কাজ করা উচিত:
date +%s
%s seconds since 1970-01-01 00:00:00 UTC
করার %s seconds since the epoch, 1970-01-01 00:00:00 UTC
কারণ আমি সেখানে এটা মিস করেছি।
date
মধ্যে অন্তর্নির্মিত নয় bash
, সুতরাং আপনার সংস্করণটির bash
কোনও date
ব্যবস্থা নেই যা আপনার সিস্টেম শিপগুলি প্রয়োগ করে with
date +%s.%N
date +%s%3N
শুধু যোগ করতে।
কোনও নির্দিষ্ট তারিখের (যেমন 21 শে অক্টোবর 1973) পর্বের পর থেকে (1 জানুয়ারি 1970) সেকেন্ড পান।
date -d "Oct 21 1973" +%s
সেকেন্ডের সংখ্যাটিকে তারিখে ফিরিয়ে আনা
date --date @120024000
কমান্ডটি date
বেশ বহুমুখী। তারিখটি নিয়ে আপনি করতে পারেন এমন অন্য একটি দুর্দান্ত জিনিস (নির্লজ্জভাবে এ থেকে অনুলিপি করা হয়েছে date --help
)। মার্কিন পশ্চিম উপকূলে পরের শুক্রবার সকাল 9 টা থেকে স্থানীয় সময়টি প্রদর্শন করুন
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
আরও ভাল, ম্যান পৃষ্ঠাটি পড়ার জন্য কিছুটা সময় নিন http://man7.org/linux/man-pages/man1/date.1.html
date
বা কারণ আমি zsh
(ম্যাকোস ক্যাটালিনা) ব্যবহার করছি তবে এটি আমার পক্ষে কার্যকর হয় না। চলমান $ date -d "Oct 21 1973" +%s
আউটপুটusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
এখনও অবধি, সমস্ত উত্তর বহিরাগত প্রোগ্রামটি ব্যবহার করে date
।
বাশ ৪.২, যেহেতু printf
একটি নতুন সংশোধক রয়েছে %(dateformat)T
যা যুক্তির সাহায্যে ব্যবহৃত -1
ফরমেটের সাথে বর্তমান তারিখকে আউটপুট করে দেয় dateformat
, হ্যান্ডেল দ্বারা পরিচালিত হয় strftime(3)
( man 3 strftime
ফর্ম্যাটগুলি সম্পর্কিত তথ্যের জন্য)।
সুতরাং, খাঁটি বাশ সমাধানের জন্য:
printf '%(%s)T\n' -1
বা যদি আপনার ফলাফলটি একটি চলকতে সঞ্চয় করতে হয় var
:
printf -v var '%(%s)T' -1
কোনও বাহ্যিক প্রোগ্রাম এবং কোনও সাবহেল নেই!
4.3 বাশ, যেহেতু এটি নির্দিষ্ট না করা এমনকি সম্ভব -1
:
printf -v var '%(%s)T'
(তবে -1
তবুও সর্বদা যুক্তি দেওয়া বুদ্ধিমানের কাজ হতে পারে )।
আপনি যদি -2
পরিবর্তে যুক্তি হিসাবে ব্যবহার করেন তবে -1
বাশ বর্তমান তারিখের পরিবর্তে শেলটি শুরু করার সময়টি ব্যবহার করবে। এটি অতিবাহিত সময়ের গণনা করতে ব্যবহার করা যেতে পারে
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2
যদি দীর্ঘতর চলমান কাজ থাকে তবে আপনি (ব্যাকআপগুলি নিয়ন্ত্রণের জন্য কোনও স্ক্রিপ্টের কথা চিন্তা করুন) ব্যবহার করতে চান এবং শেষে একটি মেইল প্রেরণ করুন "ব্যাকআপ শুরু হয়েছে $ কিছুটা এখন at এ শেষ হয়েছে" - যা -2
কোনও স্টোর এড়ানো এড়ানো দিয়ে সম্পন্ন করা যেতে পারে শুরুতে ডেডিকেটেড ভেরিয়েবল।
বেশিরভাগ অ্যাওক বাস্তবায়ন সহ:
awk 'BEGIN {srand(); print srand()}'
srand()
সাধারণত বর্তমান তারিখ / সময় সহ সিড হয়। srand()
পূর্বে বীজ হিসাবে ব্যবহৃত মানটি ফেরত দেওয়ার জন্য দ্বিতীয় কল ।
bash
5.0 সাল থেকে ( 7 জানুয়ারী 2019 এ প্রকাশিত ) আপনি বিল্ট-ইন ভেরিয়েবলটি ব্যবহার করতে পারেন EPOCHSECONDS
।
$ echo $EPOCHSECONDS
1547624774
রয়েছে EPOCHREALTIME
যা সেকেন্ডের ভগ্নাংশ অন্তর্ভুক্ত করা হয়েছে।
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
দশমিক বিন্দু সরিয়ে মাইক্রো সেকেন্ডে (μ গুলি) রূপান্তর করা যায়। এটি bash
অন্তর্নির্মিত গাণিতিক ব্যবহার করার সময় আগ্রহী হতে পারে (( expression ))
যা কেবলমাত্র পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে।
$ echo ${EPOCHREALTIME/./}
1547624774371215
উপরে থেকে সমস্ত উদাহরণে মুদ্রিত সময়ের মানগুলি ভাল পাঠযোগ্যতার জন্য সমান। বাস্তবে সময়ের মানগুলি পৃথক হয় যেহেতু প্রতিটি কমান্ড কার্যকর করতে অল্প পরিমাণ সময় নেয়।
date +%s%3N
) আপনি ব্যবহার করতে পারেনecho $(( ${EPOCHREALTIME/./} / 1000 ))
এটি @ পেলিউসাইড যা করেছে তার একটি এক্সটেনশন, তবে ম্যাক্সের জন্য:
কোন নির্দিষ্ট তারিখের জন্য যুগের আগে (জানুয়ারী 1 1970) থেকে সেকেন্ডের সংখ্যা নির্ধারণ করা (যেমন 21 অক্টোবর 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
দয়া করে মনে রাখবেন, সম্পূর্ণতার জন্য, আমি সময়ের অংশটি ফর্ম্যাটে যুক্ত করেছি। কারণ হ'ল আপনি যে date
তারিখের অংশটি দিয়েছেন তা গ্রহণ করবে এবং প্রদত্ত মানের সাথে বর্তমান সময় যুক্ত করবে । উদাহরণস্বরূপ, আপনি উপরের কমান্ডটি যদি '00: 00: 00 'অংশ ব্যতীত 4:19 অপরাহ্নে কার্যকর করেন তবে এটি স্বয়ংক্রিয়ভাবে সময় যোগ করবে। যেমন "21 অক্টোবর 1973" "অক্টোবর 21 1973 16:19:00" হিসাবে পার্স করা হবে। আপনি যা চান তা তা নাও হতে পারে।
আপনার টাইমস্ট্যাম্পটিকে কোনও তারিখে ফিরিয়ে আনতে:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
তারিখ প্রয়োগের জন্য অ্যাপলের ম্যান পৃষ্ঠা: https://developer.apple.com/library/mac/docamentation/Darwin/References/ManPages/man1/date.1.html
date
কমান্ডের জন্য, যেখানে যে কোনও সমাধানের প্রস্তাব দেওয়া date -d
হয় তা জিএনইউর জন্য date
। ম্যাকোজে বিএসডি তারিখটি ফ্রিবিএসডি থেকে আসে এবং নেটবিএসডি এবং ওপেনবিএসডি-র সাথে প্রচুর বিকল্প শেয়ার করে। এবং এটি বাশ থেকে সম্পূর্ণ পৃথক ।
%N
বিকল্প GNU তারিখ ভগ্ন সেকেন্ডের জন্য উল্লিখিত MacOS এর তারিখ হইতে অনুপস্থিত। 10.14-এ, কোনও ফর্ম্যাট ম্যান পৃষ্ঠায় নেই; তারা strftime(3)
ম্যান পৃষ্ঠায় রয়েছে, যা আপনার কাছে নেই যদি আপনি এক্সকোড ইনস্টল না করেন এবং আপনি না করেন তবে ম্যান কমান্ডের সাহায্যে দেখতে পাবেন না।