2016-05-03 10 views
0

初心者再び!どのようなtime_zones perl DateTime受け入れる

私はドキュメンタリーを経由して見つけることを試みたが、することができませんでした:PerlでのDateTimeが受け入れるん

何TIME_ZONEリテラル?

CESTは無効です。 CETを出すとき、出力は現在の時間ですが、現在CESTタイムゾーンがアクティブです。

私は: 私は現在の時間を取得し、それがCETになる時間を知りたいと思います。

サーバがCESTで動作している場合は、結果として-1hを与える必要があります。サーバーがCETで実行されている場合は、現在の時刻が表示されます。

私のアプローチは、次のとおりです。結果として、サーバの現在の時間を与える

$av_loc_TESTHOUR=DateTime->now(time_zone=>'CET')->strftime('%H'); 

。しかし、サーバーは現在CESTを持っています(私は-1hを得ることを期待しています)。 DateTimeモジュールのdocumentationから

よろしく

カール・ハインツ・

+0

私自身で解決方法が見つかりました:perl -e 'use DateTime;私のav_tmp_DT = DateTime :: TimeZone-> all_names;印刷 "@ av_tmp_DT \ n"; ' – averlon

+0

CETで時間を計算する方法を見つけました: まず、私の現在の時間をmashineで取得します:$ av_loc_TESTHOUR = DateTime-> now(time_zone => 'CET') - > strftime( '%H'); 次に、オフセット値を1つ減らします。$ av_loc_TESTHOUR- = DateTime-> now(time_zone => 'CET') - > is_dst(); – averlon

答えて

1

TIME_ZONEパラメータは、スカラーまたはDateTime::TimeZoneオブジェクトのいずれかになります。文字列は単に "name"パラメータとしてDateTime::TimeZone->newメソッドに渡されます。この文字列は、Olson DBのタイムゾーン名( "America/Chicago")、オフセット文字列( "+0630")、または "floating"または "local"とすることができます。詳細については、DateTime::TimeZoneのドキュメントを参照してください。

「詳細」のドキュメントは、hereです。

"Olson"データベースは、標準IANA TZ Databaseであり、その識別子はhereです。

"CET"のような識別子は、下位互換性の目的でのみ使用されます。代わりに、"Europe/Paris"などの完全修飾ロケーションベースのタイムゾーン識別子を使用する必要があります。

+0

はい、この場合は「ヨーロッパ/ベルリン」は役に立ちません。私は、私が現在私のマシーンに何を持っているかにかかわらず、CETで何時になるかを計算する必要があります。 BASHができます! しかし、私はすでに使用する結果を掲載しました。コーナーの周りの私の考えを引き起こしたが、それはしばしばITのケースです。少なくともそれは動作します。 – averlon

+0

私はあなたが慎重にこれを考えたとは思わない。 [タイムゾーンタグwiki](http://stackoverflow.com/tags/timezone/info)、[夏時間とタイムゾーンのベストプラクティス](http://stackoverflow.com/q/2532729/634824)をお読みください。 )記事。 –

+0

私はCETを "Europe/Berlin"に置き換えました。同じ結果が得られますが、「設計通り」に準拠している方が安全です。 このCESTからCETへの変換が必要な環境は複雑で、私はこれを気にしたくありません。少なくとも、投稿されたソリューションは私のために働く。だから私はこの間にとどまります。日付/時刻の構成は極端に困難です。私がbashで実用的なソリューションを手に入れるまでには、数週間かかりました。しかし、ヒントのおかげで。 – averlon

関連する問題