শেল স্ক্রিপ্টে 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.