В сценариях оболочки BASH или с использованием gdate, учитывая дату типа «окт 2011», как мне конвертировать в формат числа год-месяц? Например, выход должен быть «2011-10».Unix convert Month name to number
ответ
mydate="Oct 2011"
date --date="$(printf "01 %s" $mydate)" +"%Y-%m"
parse_datetime интерфейс даты GNU (который является то, что в данном примере используется) имеет множество правил. форма даты в октябре 2011 года не является одной из них, поэтому вы добавляете «01» к ней, а дата нравится.
Я не уверен, есть ли более короткий способ сделать это, но вот один из способов. Это отнюдь не глупое доказательство. Вы можете улучшить это, добавив другие проверки для ввода и сделать регистр сравнения нечувствительным.
#!/bin/ksh
### Validate input
if [ $# -eq 0 ]
then
echo "Usage: $0 InputMonYYYY"
echo "Example: $0 \"Oct 2011\""
exit 1
fi
### Read input
INPUTSTR=$1
MON_STR=`echo $INPUTSTR |cut -d' ' -f1`
YYYY_STR=`echo $INPUTSTR |cut -d' ' -f2`
if [[ "$MON_STR" = "Jan" ]] then
MON_NUM=01
elif [[ "$MON_STR" = "Feb" ]] then
MON_NUM=02
elif [[ "$MON_STR" = "Mar" ]] then
MON_NUM=03
elif [[ "$MON_STR" = "Apr" ]] then
MON_NUM=04
elif [[ "$MON_STR" = "May" ]] then
MON_NUM=05
elif [[ "$MON_STR" = "Jun" ]] then
MON_NUM=06
elif [[ "$MON_STR" = "Jul" ]] then
MON_NUM=07
elif [[ "$MON_STR" = "Aug" ]] then
MON_NUM=08
elif [[ "$MON_STR" = "Sep" ]] then
MON_NUM=09
elif [[ "$MON_STR" = "Oct" ]] then
MON_NUM=10
elif [[ "$MON_STR" = "Nov" ]] then
MON_NUM=11
elif [[ "$MON_STR" = "Dec" ]] then
MON_NUM=12
fi
echo ${YYYY_STR}-${MON_NUM}
mon = (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) echo $ {mon [3] } – Nayeem
read mon year <<< "Oct 2012"
date -d "$mon 1 $year" "+%Y-%m"
Результат:
2012-10
Вы даже можете пропустить команду 'read', так как« 1 октября 2012 »является принятым форматом ввода для' date': 'dateStr =" Oct 2012 "; date -d "1 $ dateStr" "+% Y-% m" ' – chepner
немного больше объяснений будет приятным, например, с 1 между $ mon и $ year и + перед% Y. – wordsforthewise
Я понял, что 1 после $ mon - это как флаг, который говорит «использовать сокращенный месяц». + является 'при использовании опции для указания даты (да), любой необязательный аргумент должен быть строкой формата, начинающейся с '+'' – wordsforthewise
Bash4 поддерживает хэш-таблицы (ответ Джим является правильным, хотя).
Пример
#!/bin/bash
declare -A months=(["Jan"]="01" ["Feb"]="02")
mydate="Jan 2011"
echo ${mydate:4:8}-"${months["${mydate:0:3}"]}"
Выход:
2011-01
case "`date | awk '{print $2 }'`" in
Jan) MON=01 ;;
Feb) MON=02 ;;
Mar) MON=03 ;;
Apr) MON=04 ;;
May) MON=05 ;;
Jun) MON=06 ;;
Jul) MON=07 ;;
Aug) MON=08 ;;
Sep) MON=09 ;;
Oct) MON=10 ;;
Nov) MON=11 ;;
Dec) MON=12 ;;
esac
echo $MON
Вы можете преобразовать месяц к ряду, находя позицию строки имени:
#!/bin/bash
month=Oct
months="JanFebMarAprMayJunJulAugSepOctNovDec"
tmp=${months%%$month*}
month=${#tmp}
monthnumber $((month/3+1))
printf "%02d\n" $monthnumber
Выход вышеприведенного скрипта:
10
Ваша конкретная строка, которую вы могли бы написать:
#!/bin/bash
mydate="Oct 2011"
monthnumber() {
month=$1
months="JanFebMarAprMayJunJulAugSepOctNovDec"
tmp=${months%%$month*}
month=${#tmp}
monthnumber=$((month/3+1))
printf "%02d\n" $monthnumber
}
arr=(`echo ${mydate}`);
month=$(monthnumber ${arr[0]})
year=$(echo ${arr[1]})
echo "$year-$month"
Выход будет:
2011-10
- 1. Convert month number to month name with sql
- 2. Postgres Convert String to Number
- 3. javascript convert $ string to number
- 4. convert oracle NUMBER to Timestamp
- 5. python/pandas: convert month int to month имя
- 6. Невозможно преобразовать int month to month name android java
- 7. Convert epoch/unix to Datetime
- 8. SQL Real number convert to Ft & In
- 9. convert string to Number in angularjs
- 10. Convert Active Directory DistinguishedName to Domino Name
- 11. Javascript get month range by month name
- 12. Java 8 Lambda to convert Number [] [] to double [] []
- 13. Сортировка XSL по дате в Month-Name Day-Number Year-Number format
- 14. Java - convert unix linefeed to return return
- 15. oracle convert unix epoch time to date
- 16. android convert unix time to utc date
- 17. DateTime Convert from int to Month Имя в C#, Silverlight
- 18. Convert MM/DD/YYYY date to Month День Год
- 19. Convert String to date format with содержит символы month
- 20. Convert Network Interface Name
- 21. SQL get last month name
- 22. SQL Query Month Name Сортировка
- 23. jQuery tablesorter month name locale
- 24. convert arabic String to english number in Swift
- 25. convert roman to number получил индекс вне диапазона ошибка
- 26. C Convert to Farhenheit Convert to Celsius
- 27. GROUP BY Month Number и Year
- 28. jQuery Number to Number прокрутка
- 29. Convert Midi Note Numbers To Name and Octave
- 30. HEX to BIN convert
Это не работает для меня, я должен был поставить кавычки '$ mydate' так что вторая строка читает 'date -date = '$ (printf" 01% s "" $ mydate ")" + "% Y-% m" ', так как иначе' Oct 2011' становится 'Oct2011' –