ෂෙල් ස්ක්‍රිප්ටයේ YYYY-MM-DD ආකෘති දිනය


1131

මම $(date)මගේ බාෂ් ෂෙල් ස්ක්‍රිප්ටයේ භාවිතා කිරීමට උත්සාහ කළෙමි , කෙසේ වෙතත්, මට දිනය YYYY-MM-DDආකෘතියෙන් අවශ්‍ය වේ.
මම මෙය ලබා ගන්නේ කෙසේද?

Answers:


1855

බාෂ් (> = 4.2) හි බාහිර date(සාමාන්‍යයෙන් GNU දිනය) වෙනුවට printf හි සාදන ලද දින ආකෘති පත්‍රය (bash හි කොටසක්) භාවිතා කිරීම වඩාත් සුදුසුය .

ඒ නිසාම:

# 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" එය OP ඉල්ලන දේ නොවේ.
ඩර්මයික්

6
මෙය මට වැඩ කරයි. මෑන් පිටුව යෝජනා කරන්නේ මාසයේ පළමු දිනය 01, අංක 1 (නික්. 2012-07-01).
බොබ් කුහාර්

32
DATE = $ (දිනය +% d-% m-% Y ""% H:% M:% S); මම අවසන් කළ දේ.
ජාකොප් කේන්

5
මෙම කෙටිමං කොතරම් පුළුල්දැයි මම පරීක්ෂා කර නැත, නමුත් සමහර බෙදාහැරීම් වලදී ඔබට +%F %Tකෙටිමඟක් ලෙස භාවිතා කළ හැකිය +%Y-%m-%d %H:%M:%S. බව පමණක් සටහන් සමහර ගොනු පද්ධති (කැස්ස ** HFS) බවට පරිවර්තනය වනු ඇත :වෙත /ඔබ වැනි වැලක් ලබා දීම, 2016-09-15 11/05/00බලවත් අවුල් කරන.
beporter

26
මෙම සහස්‍රයේ ඕනෑම POSIX- අනුකූල කවචයක ඇති කැමති වාක්‍ය ඛණ්ඩය date=$(date)වෙනුවට date=`date`. ඔබේ පුද්ගලික විචල්‍යයන් සඳහා ලොකු අකුරු භාවිතා නොකරන්න; ලොකු අකුරු විචල්‍ය නම් පද්ධතිය සඳහා වෙන් කර ඇත.
ත්‍රිත්ව

344

උත්සාහ කරන්න: $(date +%F)


12
දිනය සඳහා මිනිසාගේ පිටු කියවන්නේ:% F සම්පූර්ණ දිනය; % Y-% m-% d ට සමාන වේ, එබැවින් මෙය පිළිගත් පිළිතුර සඳහා වඩාත් සංයුක්ත අංකනයකි.
හේවර්ඩ් ගීතුස්


48

ඔබ සොයන්නේ ISO 8601 සම්මත දින ආකෘතියයි, එබැවින් ඔබට GNU දිනය තිබේ නම් (හෝ 1988 ට වඩා නවීන දින නියමයක් තිබේ නම්) කරන්න:$(date -I)


9
මා සතුව මෑත (> 1988) මැක් ඕඑස් එක්ස් පරිගණකයක් ඇති අතර date -Iඑය ක්‍රියාත්මක නොවීය. බීර භාවිතයෙන් ('g' උපසර්ගය භාවිතා කරන) GNU coreutils ස්ථාපනය කිරීමෙන් පසු සාර්ථක විය. gdate -I
ජොයෙල් පුර

3
අමුතුයි. -IGNU සඳහා ලේඛනගත කර ඇති විකල්පය මට සොයාගත නොහැක date, එය ප්‍රමාණවත් යැයි පෙනේ date +%F.
චෙප්නර්

3
OS X සාමාන්‍යයෙන් GPL v3 මුඩු බිමක් වන බැවින් ඒවා යාවත්කාලීන කළ දිනය හෝ BASH මෑතකදී නොතිබුණි.
ඉන්ඩොලරින්

මම මෙම විකල්පයට කැමතියි එයට %ක්‍රෝන් වලින් පැන යාමට අවශ්‍ය නොවන නිසා .
simlev

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

අතර කොලන් (:) ඉවත් කිරීමට භාවිතා කළ හැකිය

ප්‍රතිදානය

2018-06-20_09-55-58

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

ප්‍රතිදානය වනු ඇත 2015-06-14.


3
හේතු කිහිපයක් නිසා වැරදියි, පැහැදිලිවම මෙය 00:00 ත් 01:00 ත් අතර වැරදි දිනයක් ලබා දෙන අතර ඔබට අමතරව a %.
ජෙරාඩ් බර්ගර්

එය සත්‍ය නොවේ. මෙම විරල තනි උපුටා දැක්වීමක් මෙන් විය යුතුය
බෙහාන් ගොල්

19

මෑත බෑෂ් සමඟ (version 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 බාහිර විධානයක් වන එය .

උප කුලකයක් සෑදීම අවශ්‍ය නොවන බැවින් printf -v date ...වේගවත් වේ date=$(printf ...).


4
2019 දී සටහනක් ලෙස, මෙම විධානය ඇදහිය නොහැකි තරම් වේගවත් වේ * dateඔබ මෙය දැනටමත් බාෂ් ස්ක්‍රිප්ට් එකකින් භාවිතා කරන්නේ නම්, එයට අමතර පුස්තකාල පැටවීමට අවශ්‍ය නැත. (* මම මගේ ලිනක්ස් සේවාදායකයේ පුනරාවර්තන 1000 ට වඩා x 160x වේග වෙනසක්
මැන බැලුවෙමි

ittimtj එය පෙන්වා දීමට ස්තූතියි! පිළිතුරට වේගය පිළිබඳ සටහන් කිහිපයක් මම එකතු කළෙමි.
wjandrea

1
උපසිරැසියක් printf -v dateනොපැවැත්වීම පිළිබඳ අදහස් දැක්වීම සඳහා මට +5 හැකි වේවායි ප්‍රාර්ථනා කරමි . ඉතා හොඳ තොරතුරු !!
timtj

සාමාන්‍යයෙන් මම දිනය භාවිතා කරන්නේ මට සමහර දිනයන් හරහා වැඩි කිරීමට අවශ්‍ය නිසාය. මුද්‍රිත දින ගණිතය කළ හැකිද?
මර්ලින්

1
Er මර්ලින් මම එහෙම හිතන්නේ නැහැ
wjandrea

8

මට මේ වගේ කාර්යයක් ඇති සෑම අවස්ථාවකම මම නැවත වැටෙනවා

$ man strftime

සියලු හැකියාවන් මට මතක් කිරීමට.


7

2017 ට වඩා 17 වැනි අංක දෙකකින් ඔබට වසර අවශ්‍ය නම්, පහත සඳහන් දේ කරන්න:

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

7

මම පහත සඳහන් සූත්‍රකරණය භාවිතා කරමි:

TODAY=`date -I`
echo $TODAY

මෑන් පිටුව පිරික්සන්න, dateතවත් ප්‍රයෝජනවත් විකල්ප ගණනාවක් තිබේ:

man date

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

මෙහි x යනු නියැදි දිනය භාවිතා කරන අතර පසුව උදාහරණ මඟින් දත්ත ආකෘතිකරණය කිරීම මෙන්ම දින 10 ක් වැඩිපුර ලබා ගැනීම සහ වත්මන් දිනය පෙන්වයි.


6

මම භාවිතා $(date +"%Y-%m-%d") හෝ $(date +"%Y-%m-%d %T")කාලය පැය සමග.


1

ඔබට දිනය පරිසර විචල්‍යයක් ලෙස සැකසිය හැකි අතර පසුව ඔබට එය භාවිතා කළ හැකිය

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

හෝ

DATE =`date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.