的時間到了,我試圖逃跑Larry Wall的惡夢,在Perl移動到Python(工作)。爲此,我正在通過深入的自我學習,從一個深夜牛仔編碼員,一個人的軍隊,非記錄員,我相信你知道像我這樣的人(!),一個和平的學生Pythonic的方式。我也想在這裏很有趣,所以請耐心等待。 :/
爲此,我正在通過將通用代碼和實用程序從Perl轉換爲Python的工作。本週,我一直使用我在Perl中編寫的DateTime相關庫來模擬Python庫,該庫定義了暴露相同合約的類,特別是在Olson數據庫的各個時區中創建DateTime對象。這裏是Perl中的例子。我很難理解如何在Python中完成等價物。請注意我在PST上寫的是:
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;
這會創建一個Perl DateTime對象,其值與給定的時區相對應。例如,在一個單獨的腳本:
#!/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
由於目前是上午在洛杉磯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中完成相同的功能嗎? (我想它是!)如果是這樣,請幫助!
由於
繁榮!謝謝!!! – mobiusinversion
當然,命名是關鍵,任何建議的Python風格? – mobiusinversion
最重要的是要保持一致,並與您合作的人員保持一致。大多數人(或多或少)符合[PEP8](http://www.python.org/dev/peps/pep-0008/)。對於類名,這意味着使用CamelCase,但是你會注意到,標準庫本身打破了這個:'datetime.datetime','collections。defaultdict'等。 – unutbu