2 に答える
おそらく、いくつかの環境変数をいじる必要があるでしょう (例: TZ
、LC_ALL
など)。
一般的な環境変数のほとんどとその意味を示すこのページを参照してください
いくつか試してみてください:コマンド自体の前に同じ行に置くことで、次のコマンドの実行中だけ値を強制的に変更できます。
TZ=.... LC_LANG=..... date -d .......
date -d ....
2 つの環境変数を使用してTZ
呼び出し、LC_LANG
一時的な値に設定します。
いくつかの興味深いポインタ (ロケールの日付を入力として受け取り、それを関連するエポックまたは Unix タイムスタンプに変換するプログラムがあるかどうかは今のところわかりません... しかし、それに続く希望があるようです (かなり標準的に見えます)オンライン ドキュメントの証跡:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_02
これは、他の多くの中で、次のことについて語っています。
LC_TIME この変数は、日付と時刻のフォーマット情報のロケール カテゴリを決定します。strftime() の時間関数の動作に影響します。この変数の追加のセマンティクスがある場合、それは実装定義です。
どちらが指すか: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdate.html
真ん中に次のように書かれています:
テンプレートと getdate() によって実行される入力仕様との一致は、大文字と小文字を区別しません。 月名と曜日名は、大文字と小文字の任意の組み合わせで構成できます。プロセスは、LC_TIME カテゴリを設定することにより、入力の日付または時刻の指定が特定の言語であることを要求できます ( setlocale を参照)。
およびポイント: http://pubs.opengroup.org/onlinepubs/9699919799/functions/setlocale.html
... 楽しくお読みいただければ幸いです。あなたが見つけたものを教えてください!
coreutilsメーリングリストの助けを借りて、最終的にこれを理解しました。ただし、そこで提供されている例では perl を使用しています。それらは特に POSIX::strptime モジュールに依存していますが、これは perl の標準インストールには付属していません。time
したがって、モジュールを持つpythonでこれを解決しました。このモジュールは、python2 および python3 のほとんどのインストールで使用できるはずです。
プログラムで使用する方法は次のとおりです。
Python ソリューション:
$ timestamp='2013年1月8日 20時19分'
$ time_format='%Y年%m月%d日 %H時%M分'
$ gdate -u -R -d "$(python -c 'import sys; from time import strptime; t=strptime(sys.argv[-1],"'$time_format'"); print("%d-%d-%d %d:%d"%(t.tm_year,t.tm_mon,t.tm_mday,t.tm_hour,t.tm_min))' $timestamp)"
Tue, 08 Jan 2013 20:19:00 +0000
これは、python2 と python3 の両方で機能します。タイムスタンプと形式は、好きなように置き換えることができます。
Perl ソリューション
coreutilsで私に与えられた答えを文書化するために、perlソリューションはこれです(必要POSIX::strptime
)
$ gdate -u -R -d "$(perl -MPOSIX::strptime -le 'my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = POSIX::strptime("$ARGV[0]","%Y年%m月%d日 %H時%M分");$year+=1900;$mon+=1;printf("%04d-%02d-%02d %0d:%02d\n",$year,$mon,$mday,$hour,$min);' "2013年1月8日 20時19分")"