
date -d
私のWebスクレイピングスクリプトは、長い間「1999年3月11日」などの人の形式の時間と日付のスタンプを読み、-sパラメータを介して必要な他の形式に変換するためによく使用されました。
他のロケールで印刷された日付をどのように理解できますか27 Kwi, 13:54
?洗練?必要に応じて、年(2012)を人為的に追加/追加できます。
私は私を確認し、env
次のことを試しましたが、運がありませんでした。
LOCALE=PL date -d "30 Kwi, 17:02"
LANGUAGE=pl_PL:pl date -d "30 Kwi, 17:02"
LC_CTYPE=pl_PL:pl date -d "30 Kwi, 17:02"
LANG=pl_PL:pl date -d "30 Kwi, 17:02"
LC_COLLATE=pl_PL:pl date -d "30 Kwi, 17:02"
LC_MESSAGES=pl_PL:pl date -d "30 Kwi, 17:02"
date: invalid date `30 Kwi, 17:02'
私がインストールしたシステムでは
LANGUAGE=en_US:en
LC_CTYPE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
答え1
残念ながら、あなたはできません。
現在の実装では、「AM」、「DST」、「EST」、「first」、「January」、「Sunday」、「tomorrow」、「year」などの英語の単語と略語のみがサポートされています。
date
Pythonや他の同様のツールを使用してこれを行う方法が見つからなかったため、Pythonでこれを行う方法は次のとおりです。
import time
import locale
locale.setlocale(locale.LC_TIME, 'pl_PL')
logtime = time.strptime('30 Kwi 2012, 17:02', '%d %b %Y, %H:%M')
strptime を提供する任意の言語で使用できます。Python、真珠、氏、ルビー、等。
必ず使用する必要がある場合は、bash
以下を試してください。
# create an associative array, e.g. month[kwi] = 4
# requires bash >= 4
declare -A month
for m in {1..12}; do
# any year should do since we only print the month
mmm=$(LC_TIME=pl_PL.UTF-8 date -d "2000-$m-1" "+%b")
month[$mmm]=$m
done
# test that the associative array works, should print 4
echo ${month[kwi]}
# given arguments <day> <month> <year>, <hour>:<minute>
# where month is a three-letter abbreviated Polish month name
# print it using the system's default date format
pl_date() {
local d=$1
local mmm=$2
local yyyy=$3
local hhmm=$4
local m=${month[$mmm]}
date -d "$yyyy-$m-$d $hhmm"
}
# use without quotes
pl_date 30 kwi 2012 17:02
メモ:
英語の場合でも、年は必須であり、カンマは許可されません。
$ date -d "30 Apr, 17:02"
date: invalid date `30 Apr, 17:02'
$ date -d "30 Apr 2012 17:02"
Mon Apr 30 17:02:00 PDT 2012
同じリストのみがLANGUAGE
サポートされ、他の変数にはpl_PL:pl
同じ名前が必要です。pl_PL
pl_PL.UTF-8