【问题标题】:How can I get date difference in minutes with Perl如何使用 Perl 以分钟为单位获取日期差异
【发布时间】:2021-12-13 09:56:53
【问题描述】:

我的例子是:How to compare dates using perl?

...
# $ARG1 is specified by the user for example "10" min

my $difftime=$ARG1; 

# -- Get date ---------------------------------------------------------------------
#Stores current date and time - $time min
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time() - (60*$difftime));
$year += 1900;

#parse date format to '22.10.2021 00:00:00' -----------------------------------------------------
my $act_date="$mday.$mon.$year $hour:$min:$sec";
...

我的第一个问题是 $hour 和 $mon 是从一个到低,为什么?

我的第二个问题是时间是一位数“8:4:34”而不是两位数“08:04:34”。这是日期比较的问题吗?

...
#compare date

# date example for $sql_value is 06.10.2021 09:38:27
my $date_to_compare=$sql_value;

if ($act_date <= $date_to_compare) 
{
 print "the current date is smaller";
} 
else 
{
 print "the current date is greater";
}
...

我只得到“当前日期较小”为什么?

另外,我怎样才能让时间以分钟为单位?

谢谢

【问题讨论】:

  • 请,每个帖子只问一个问题。您提到您以问题How to compare dates using Perl 为例。接受的答案建议使用Time::Piece 来执行此操作,但您不使用此模块;这是为什么?它会让您的生活更轻松,特别是因为 Time::Piece 的文档解释了如何解决您的大部分问题。
  • 或来自 CPAN 的 DateTime
  • @Apfelkuchen - 日期字符串只有在订购 year-mon-mday 时才能进行合理比较。
  • 一个非常相关的post,以及小时/分钟的差异。两个模块也一样

标签: perl datetime


【解决方案1】:

像您尝试做的那样在低水平上处理日期和时间确实会让您的生活变得比实际需要的要困难得多。您应该遵循链接到的示例答案中的建议并使用Time::Piece

我的第一个问题是 $hour 和 $mon 是从一个到低,为什么?

如果$hour 有误,则很可能是时区差异造成的。但是$monthe documentation for localtime() 中被定义为介于 0 和 11 之间。这就是我所说的在这个级别上工作会让你的生活变得太艰难的一部分。

你真的没有说清楚你想要做什么。但是您可以使用 strptime() 从日期时间字符串创建 Time::Piece 对象。

my $date_str = '22.10.2021 00:00:00';
my $date = Time::Piece->strptime($date_str, '%d.%m.%y %H:%M:%S');

可以直接比较两个 Time::Piece 对象:

if ($dt1 > $dt2) {
  # do something
} else {
  # do something else
}

如果你减去两个 Time::Piece 对象,你会得到两个时间戳之间的秒数。

my $secs = $dt1 - $dt2;

您可以使用strftime() 方法以您想要的任何格式获取时间戳。

say $dt1->strftime('%d.%m.%y %H:%M:%S');

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2021-12-01
    • 2018-09-09
    • 2012-01-03
    • 2011-11-29
    相关资源
    最近更新 更多