【问题标题】:How to display 4/25/10 to 2010-25-04?如何显示 4/25/10 到 2010-25-04?
【发布时间】:2013-12-20 08:14:53
【问题描述】:
my$str= '4/25/10';
my$sr = join(' ',split (/\//,$str));
#my$s = sprintf '%3$d %2$d %1$d',$srt;
print$sr,"\n";

输出:

4 25 10

但我想要像 2010-25-04 这样的输出。谁能建议我如何显示我的愿望输出。给我你的建议 你的答案将是可观的。

【问题讨论】:

    标签: perl split printf


    【解决方案1】:

    好吧,一个脑残的解决方案可能是:

    my @date = split( /\//,$str)
    printf("%04d-%02d-%02d", $date[2] + 2000, $date[1], $date[0]);
    

    您可以通过突出显示您期望的年、月和日来编写一些更自我记录的东西,如下所示:

    my ($day, $month, $year) = split /\//, $str;
    printf("%04d-%02d-%02d", $year + 2000, $month, $day);
    

    【讨论】:

    • 感谢您的回答,但与您的回答相比,@JB 的回答有点简单。
    【解决方案2】:

    离你不远了。

    您可以保留单个变量以更好地处理数据,而不是在单个操作中进行拆分和连接:

    my ($d,$m,$y) = split /\//, $str;
    

    然后你可以用任何你喜欢的方式来格式化它,例如:

    printf "20%02d-%02d-%02d\n", $y, $d, $m;
    

    不过有几点说明:

    • 我不会评论源格式,但您要转换的格式没有多大意义。使用 ISO-8601: 2010-04-25 可能会更好。
    • 显然,这种做法只适用于 2099 年。
    • 对于更严重的事情,最好将此类工作委托给日期处理模块。参见例如 this question for parsingthis question for formatting

    【讨论】:

    • 现在是接受答案的好时机,点击旁边的小复选标记,然后;-)
    • 在你的回答中你为什么使用02?请告诉我
    • 前导零导致零填充(将 4 打印为 04)。
    【解决方案3】:
    use DateTime::Format::Strptime;
    my $strp = DateTime::Format::Strptime->new(
        pattern   => '%m/%d/%y',
        locale    => 'en_US'
    );
    my $dt = $strp->parse_datetime('4/25/10');
    print $dt->strftime('%Y-%d-%m'), "\n";
    

    给予:

    2010-25-04
    

    【讨论】:

    • use DateTime::Format::Strptime; 是什么意思我不知道,因为我还是初学者。你能解释一下这样做的目的吗?
    • 您提供输入/输出格式,它了解日期,进行转换。如果您需要处理各种输入/输出格式或切换时区等,这可能很有用。
    • 当我使用你的代码时,它会显示类似can't locate dateTime/formates/strptcime.pm in @INC (@inc contain:./usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5vendor_perl/usr/share/perl5/vendor_perl/usr/lib64/perl5/usr/share/perl5.).的错误
    • CPAN 是 Perl 模块的存储库。通常有一些模块已经实现了你想要的,所以你安装一个模块并使用它。
    • 这个问题是一个例子,你想做的事情已经实现和测试了,所以不用自己写,你可以使用它。
    【解决方案4】:

    不需要为此对 DateTime 做任何事情。 Time::Piece 多年来一直包含在 Perl 核心发行版中。

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use 5.010;
    
    use Time::Piece;
    
    my $date = '4/25/10';
    
    my $date_tp = Time::Piece->strptime($date, '%m/%d/%y');
    
    say $date_tp->strftime('%Y-%m-%d');
    

    【讨论】:

    • cpan有什么用?它在编写程序时有何帮助
    • CPAN 是代码库的存储库。它是使编写 Perl 程序更容易的额外(免费)代码。它很有帮助,因为它为您提供了不需要编写的代码。但是对于我的解决方案,您不需要了解 CPAN,因为我使用的库 (Time::Piece) 已作为您本地 Perl 副本的一部分安装。
    • 你能告诉我如何安装这个 cpan 模块
    • 其中许多是为您的系统预先构建的,因此您可以使用 yum(适用于 RedHat/Fedora/Centos 系统)、apt(适用于 Debian/Ubuntu 系统)或 ppm(适用于 Windows)来安装它们。或者,还有a good guide here
    猜你喜欢
    • 2018-01-21
    • 2011-01-05
    • 2022-08-23
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多