上手、
その時が来て、私はLarry Wallの悪夢から逃れ、PerlからPythonに(仕事のために)移行しようとしています。この目的のために、私は集中的な自己学習を行い、真夜中のカウボーイコーダー、一人の軍隊、非ドキュメンテーションから、私のような人々(!)を知っていると確信しています。 。また、私はここで面白くしようとしているので、我慢してください。:/
この目的のために、私は日常的に使用する一般的なコードとユーティリティをPerlからPythonに変換する作業を行っています。今週は、Perlで書いたDateTime関連のライブラリを使用して、同じコントラクトを公開するクラスを定義するPythonライブラリを作成しました。特に、OlsonデータベースからさまざまなタイムゾーンでDateTimeオブジェクトを作成しました。これがPerlの例です。Pythonで同等の処理がどのように行われるかを理解するのに苦労しています。太平洋標準時午前9時56分にこれを書いていることに注意してください。
package MyDateTime;
use Moose;
use DateTime;
has day => (is => 'ro', isa => 'Int');
has hour => (is => 'ro', isa => 'Int');
has minute => (is => 'ro', isa => 'Int');
has month => (is => 'ro', isa => 'Int');
has second => (is => 'ro', isa => 'Int');
has timezone => (is => 'ro', isa => 'Str', required => 1);
has timestamp => (is => 'ro', isa => 'Num', required => 1);
has year => (is => 'ro', isa => 'Int');
around BUILDARGS => sub {
my($orig, $class, $timezone, $timestamp) = @_;
my $datetime = DateTime->from_epoch(
epoch => $timestamp,
time_zone => $timezone,
);
return $class->$orig(
day => sprintf("%02d",$datetime->day),
hour => sprintf("%02d",$datetime->hour),
minute => sprintf("%02d",$datetime->minute),
month => sprintf("%02d",$datetime->month),
second => sprintf("%02d",$datetime->second),
timezone => $timezone,
timestamp => $timestamp,
year => $datetime->year,
);
};
__PACKAGE__->meta->make_immutable;
1;
これにより、指定されたタイムゾーンに対応する値を持つPerlDateTimeオブジェクトが作成されます。たとえば、別のスクリプトでは次のようになります。
#!/usr/bin/env perl
use Moose;
use MyDateTime;
my $timestamp = time();
my $datetime = MyDateTime->new( 'America/Los_Angeles', $timestamp );
print $datetime->hour,"\n";
$datetime = MyDateTime->new( 'America/New_York', $timestamp );
print $datetime->hour,"\n";
どの印刷物:
09
12
現在、LAでは午前9時、ニューヨークでは午後12時です。
私がPythonでできる最善のことは、次のとおりです。
import datetime, pytz, time
class DateTime:
def __init__(self, timezone, epoch):
self.timezone = timezone
self.epoch = epoch
timezoneobject = pytz.timezone(timezone)
datetimeobject = datetime.datetime.fromtimestamp( self.epoch )
self.datetime = timezoneobject.localize(datetimeobject)
def hour(self):
return self.datetime.hour
if __name__=='__main__':
epoch = time.time()
dt = DateTime('America/Los_Angeles',epoch)
print dt.datetime
dt = DateTime('America/New_York',epoch)
print dt.datetime
どの印刷物:
9
9
ここでこれがどこで間違っているのかわかりません!pytzを使用してPythonで同じことを達成することは可能ですか?(そうだと思います!)もしそうなら助けてください!
ありがとう