শেল স্ক্রিপ্টে YYYY-MM-DD বিন্যাসের তারিখ


1107

আমি $(date)আমার ব্যাশ শেল স্ক্রিপ্টটিতে ব্যবহার করার চেষ্টা করেছি, তবে আমি YYYY-MM-DDফর্ম্যাটে তারিখটি চাই ।
আমি এটি কিভাবে পেতে পারি?

উত্তর:


1826

ব্যাশ (> = 4.2) এ প্রিন্টফের অন্তর্নির্মিত তারিখ বিন্যাস (ব্যাশের অংশ) বাহ্যিক date(সাধারণত জিএনইউ তারিখ) না ব্যবহার করা ভাল।

যেমন:

# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1 

# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1 

# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal

ব্যাশে (<4.2):

# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')

# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')

# print current date directly
echo $(date '+%Y-%m-%d')

অন্যান্য উপলভ্য তারিখের ফর্ম্যাটগুলি ডেট ম্যান পৃষ্ঠা থেকে দেখা যেতে পারে (বহিরাগত নন-ব্যাশ নির্দিষ্ট আদেশের জন্য):

man date

4
মাসের প্রথম দিনগুলিতে আমি "2012-07-1" পাই যা ওপি যা চায় তা নয়।
— DerMike

6
এটি আমার পক্ষে কাজ করে। ম্যান পৃষ্ঠাটি পরামর্শ দেয় যে মাসের প্রথমটি 01, কোনও 1 নয় (প্রাক্তন 2012-07-01)।
— বব কুহর

30
তারিখ = $ (তারিখ +% d-% m-% Y ""% এইচ:% এম:% এস); আমি কি পরে শেষ।
— জ্যাকপকেনে

5
এই শর্টকাটগুলি কীভাবে বহুল পরিমাণে উপলব্ধ তা আমি পরীক্ষা করে দেখিনি, তবে কিছু বিতরণে আপনি +%F %Tশর্টকাট হিসাবে ব্যবহার করতে পারেন +%Y-%m-%d %H:%M:%S। শুধু মনে রাখবেন যে কিছু ফাইল সিস্টেম (কাশি ** HFS) রূপান্তর করবে :একটি থেকে /, আপনি একটি স্ট্রিং মত দান 2016-09-15 11/05/00যা বিভ্রান্তিকর শক্তিমান।
— বোরপোরার

24
এই সহস্রাব্দে যে কোনও POSIX- মেনে চলার শেল পছন্দসই সিনট্যাক্স এর date=$(date)পরিবর্তে date=`date`। এছাড়াও, আপনার ব্যক্তিগত ভেরিয়েবলগুলির জন্য বড় হাতের ব্যবহার করবেন না; বড় হাতের অক্ষরগুলি সিস্টেমের জন্য সংরক্ষিত।
— ট্রিপলি

335

চেষ্টা করুন: $(date +%F)


12
তারিখের জন্য ম্যান পৃষ্ঠাগুলি পড়ছে:% F সম্পূর্ণ তারিখ; % Y-% m-% d এর সমান, সুতরাং এটি গৃহীত উত্তরের জন্য আরও একটি কমপ্যাক্ট স্বরলিপি।
— হাভার্ড গিথাস


47

আপনি আইএসও 8601 মানক তারিখের ফর্ম্যাটটি সন্ধান করছেন, সুতরাং আপনার যদি জিএনইউ তারিখ থাকে (বা 1988 এর চেয়ে আধুনিক কোনও তারিখের কমান্ড) কেবল করুন:$(date -I)


9
আমার একটি সাম্প্রতিক (> 1988) ম্যাক ওএস এক্স কম্পিউটার রয়েছে, এবং date -Iকাজ হয়নি। ব্রিউ (যা উপসর্গ 'g' ব্যবহার করে) ব্যবহার করে জিএনইউ কোর্টিলগুলি ইনস্টল করে কাজ করেছে। gdate -I
— জোয়েল পুররা

3
অস্বাভাবিক. -Iজিএনইউর জন্য নথিভুক্ত বিকল্পটি আমি খুঁজে পাচ্ছি না date, যদিও এটি যথেষ্ট সমান বলে মনে হচ্ছে date +%F।
— চিপনার

3
ওএস এক্স সাধারণত একটি জিপিএল ভি 3 বর্জ্যভূমি, তাই তারা সম্ভবত আপডেটের তারিখ বা BASH না পেয়ে থাকতে পারে।
— ই

20
date -d '1 hour ago' '+%Y-%m-%d'

আউটপুট হবে 2015-06-14।


3
বেশ কয়েকটি কারণে ভুল, অবশ্যই এটি 00:00 থেকে 01:00 এর মধ্যে ভুল তারিখ দেয় এবং পাশাপাশি আপনি একটি দিয়ে শেষ করেন %।
— গেরহার্ড বার্গার

এটা সত্য নয়. এই বিচ্ছিন্ন একক
— উক্তিটির

20
$(date +%F_%H-%M-%S)

এর মধ্যে কলোন (:) অপসারণ করতে ব্যবহার করা যেতে পারে

আউটপুট

2018-06-20_09-55-58

19

সাম্প্রতিক ব্যাশের সাথে (সংস্করণ ≥ 4.2), আপনি printfবিন্যাসটি সংশোধক সহ বিল্টিন ব্যবহার করতে পারেন %(strftime_format)T:

$ printf '%(%Y-%m-%d)T\n' -1  # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1  # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1  # Capture as var $date

printfdateএটি dateএকটি বাহ্যিক কমান্ডের তুলনায় বাশ বিল্টিনের চেয়ে অনেক দ্রুত is

পাশাপাশি, printf -v date ...এটি date=$(printf ...)যেহেতু সাবসেলের কাঁটাচামচ করার দরকার নেই তার চেয়ে দ্রুত ।


4
2019-এ একটি নোট হিসাবে, dateআপনি যদি ইতিমধ্যে কোনও ব্যাশ স্ক্রিপ্টের মধ্যে থেকে এটি ব্যবহার করছেন তবে এই কমান্ডটি অবিশ্বাস্যভাবে দ্রুত * কারণ এটি কোনও অতিরিক্ত লাইব্রেরি লোড করতে হয় না। (* আমি আমার লিনাক্স সার্ভারে 1000 পুনরাবৃত্তির চেয়ে 160 ডলার গতির পার্থক্য পরিমাপ করেছি)
— টাইমটজ

@টিএমটিজিকে নির্দেশ করার জন্য ধন্যবাদ! আমি উত্তরে গতি সম্পর্কে কিছু নোট যুক্ত করেছি।
— wjandrea

1
আমি আশা করি আমি printf -v dateসাব-শেল না দেওয়ার বিষয়ে মন্তব্য করার জন্য +5 করতে পারি । খুব ভাল তথ্য !!
— তিমতজ

সাধারণত আমি তারিখটি ব্যবহার করি কারণ আমার কিছু তারিখের মাধ্যমে বৃদ্ধিও করতে হবে। প্রিন্টফ কি তারিখ গণিত করতে পারে?
— মার্লিন

1
@ মের্লিন আমি এমনটি ভাবি না
— wjandrea

8

আমার যখনই এর মতো কোনও কাজ হয় তখনই আমি ফিরে আসি

$ man strftime

নিজেকে সমস্ত সম্ভাবনার কথা মনে করিয়ে দেওয়ার জন্য।


7

আপনি যদি বছরের চেয়ে দুটি সংখ্যার ফর্ম্যাটে বছরের চেয়ে 2017 এর চেয়ে 17 চান তবে নিম্নলিখিতটি করুন:

DATE=`date +%d-%m-%y`

6
#!/bin/bash -e

x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"

echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c

এখানে এক্স ব্যবহৃত নমুনা তারিখ এবং তারপরে উদাহরণ উভয় ডেটা ফর্ম্যাটিংয়ের পাশাপাশি বর্তমান তারিখের 10 মিনিট আরও বেশি তারিখ প্রাপ্ত করে।



5

আমি নিম্নলিখিত সূত্র ব্যবহার:

TODAY=`date -I`
echo $TODAY

ম্যান পেজটির জন্য চেকআউট করুন date, এখানে আরও অনেক দরকারী বিকল্প রয়েছে:

man date

1

আপনি পরিবেশ পরিবর্তনশীল হিসাবে তারিখ নির্ধারণ করতে পারেন এবং পরে আপনি এটি ব্যবহার করতে পারেন

setenv DATE `date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"

অথবা

DATE =`date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.