2

米国のサーバーで実行されるPERLスクリプトを使用して、さまざまな国の現在の日付と時刻を確認するにはどうすればよいですか?たとえば、getDTnow()はサーバー上の現在の日付と時刻を判別し、それを使用してさまざまな国の日付と時刻を返す必要があります。

PS:これが、外部モジュールなしで、組み込み関数のみを使用して実行できると便利です。


結論:日付の計算は[ここでののしり言葉を使用]複雑で、間違えやすいです。IRC、グループ、およびネットの他の部分に関する他のPerlの達人は、Etherが私にアドバイスしていたことを確認しました-DateTimeを使用してくださいDVKのソリューションは、Perl環境をいじることを気にしない人にとっても非常に優れています。(:Windowsの場合でも、Time :: Pieceドキュメントの警告セクションでは、「 Win32のスレッドで$ ENV {TZ}を設定する」場合は注意が必要であると記載されています)。

4

3 に答える 3

6

DateTimeは、標準のタイムゾーンを使用して、必要なすべてのことを実行できるすばらしいライブラリです。

use DateTime;

# returns local time in Italy
my $dt = DateTime->now(time_zone => 'Europe/Rome');

# prints time in desired format
print "The current date and time in Italy is: ", $dt->strftime('%Y-%m-%d %T');
于 2011-01-11T20:25:28.870 に答える
2

TZ環境変数を使用して、ローカルタイムが返すタイムゾーンを制御できます。

local $ENV{TZ} = ":/usr/share/lib/zoneinfo/Asia/Tokyo";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime(); 
print "$sec,$min,$hour,$mday,$mon,$year,$wday,$yday\n"'
# Prints 40,58,4,12,0,111,3,11

local $ENV{TZ} = ":/usr/share/lib/zoneinfo/Europe/London";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime(); 
print "$sec,$min,$hour,$mday,$mon,$year,$wday,$yday\n"'
# Prints 41,58,19,11,0,111,2,10

/usr/share/lib/zoneinfo残念ながら、上記のパスはUnix( Solaris、/usr/share/zoneinfoLinux)によって異なります。他のバリエーションはないように見えるので、少し移植性のあるバージョンでは、2つのディレクトリのどちらが存在するかを確認し、それを使用します。ただし、これは明らかにSolarisとLinuxでのみ機能し、他のUNIXである可能性があります。Windows / MacOS/whatnotについてはわかりません。

TZの有効な場所は、http ://www.timezoneconverter.com/cgi-bin/tzref.tzcにあります(ただし、すべての場所がシステムで利用できるとは限りません。上記のディレクトリを確認してください)。

TZデータベースの詳細については、 http://en.wikipedia.org/wiki/Tz_databaseを参照してください。

于 2011-01-11T20:00:34.527 に答える
0

キーがタイムゾーンで、値が現在の時刻からの調整であるハッシュに、タイムゾーンからの変動をいつでも保存できます。次に、現在の時刻を過ぎると、そのゾーンの現地時刻が返されます。

于 2011-01-11T19:58:36.053 に答える