2016-02-09 29 views
1

我正在将一些脚本从Perl转换为Python。我有一段看起来很奇怪的代码。这段代码是否有意义将strftime转换为一段时间,然后再转换回字符串?

my $dt   = DateTime->now->subtract(days => 1); 
my $start_time = $dt->strftime("%Y-%m-%d"); 
# ... <some code here> 
my $epoch = str2time($start_time, "GMT"); 
my $start_dt = DateTime->from_epoch(epoch => $epoch); 
my $start_date = $start_dt->strftime("%Y-%m-%d"); 

在这里,我有一个问题关于start_timestart_date

执行这最后三行是否有意义?

UPDATE:

@darch要求添加与start_time任何有用的代码。我不认为它是有用的,但在这里它(去除不显著线):

my %opts; 
my $opt_string = 'ahropuc:i:s:e:t:'; 
getopts("$opt_string", \%opts); 

my $start_time = $dt->strftime("%Y-%m-%d"); 

if ($opts{a}) { 
    if ($opts{s}) { 
     $start_time = $opts{s}; 
    } 
} 

my $epoch = str2time($start_time, "GMT"); 
my $start_dt = DateTime->from_epoch(epoch => $epoch); 
my $start_date = $start_dt->strftime("%Y-%m-%d"); 

唯一合理的答案是验证如下回答。

我将重写这部分以排除用户输入,所以如果是这样,并且这部分没有意义 - 我只是简单地将它剪掉。

+0

它*可以*从命令行参数重新分配,但我认为它预计是相同的格式。命令行参数可能不被传递,所以变量保持不变直到这3行。 – baldr

+1

有不同的'str2time'可以使用。这是从'Date :: Parse'或其他库导入的吗? – darch

+0

我对Perl并不熟悉,但在开始时我看到'use DateTime;使用Date :: Parse;'。不知道它可以从哪里导入。 – baldr

回答

2

正常化。这些行提供了用户输入的规范化。

你看,Date::Parse::str2time可以接受输入wide variety of formats。通过解析用户输入并将其重新转换为字符串,我们可以保证在内部使用一致的格式。

现有的代码可以改制为这相当于配方:

my %opts; 
my $opt_string = 'ahropuc:i:s:e:t:'; 
getopts("$opt_string", \%opts); 

my $start_time; 

# use the time specified on the command line or 'yesterday' 
if ($opts{a} and $opts{s}) { 
    my $start_time_string = $opts{s}; 
    my $epoch = Date::Parse::str2time($start_time_string, "GMT"); 
    $start_time = DateTime->from_epoch(epoch => $epoch); 
} else { 
    $start_time = DateTime->now->subtract(days => 1); 
} 

# should be called $start_date_string, but keep the old name 
# so that we could just drop this code into place 
my $start_date = $start_time->strftime("%Y-%m-%d"); 

如果您不担心接受用户输入,你应该能够安全地删除执行正常化线。

+0

感谢您的努力 – baldr

相关问题