代码之家  ›  专栏  ›  技术社区  ›  claf

如何用Perl格式化日期?

  •  6
  • claf  · 技术社区  · 16 年前

    我正在修改Xcode中预先存在的脚本以自定义文件头。脚本是Perl,这不是我最好的语言。:)

    我只需要将当前日期以dd/mm/yy格式插入标题中。

    这是我的剧本:

    #! /usr/bin/perl -w
    # Insert HeaderDoc comment for a header
    #
    # Inserts a template HeaderDoc comment for the header.
    use strict;
    
    # get path to document
    my $headerPath = <<'HEADERPATH';
    %%%{PBXFilePath}%%%
    HEADERPATH
    chomp $headerPath;
    my $rootFileName = &rootFileNameFromPath($headerPath);
    
    print "/*";
    print " * $rootFileName\n";
    print " * Project\n";
    print " *\n";
    print " * Created by Me on ";
    # in bash it would be something like that :
    # date +%d/%m/%y | awk '{printf "%s\n", $1}';
    print " * Copyright 2009 My_companie. All rights reserved.\n";
    print " *\n";
    print " */\n";
    
    sub rootFileNameFromPath {
        my $path = shift;
    
        my @pathParts = split (m'/', $path);
        my $filename = pop (@pathParts);
        my $rootFileName = "$filename";
        $rootFileName =~ s/\.h$//;
        return $rootFileName;
    }
    
    exit 0;
    

    我刚修改了print命令,所以不要要求我输入其余代码:)

    3 回复  |  直到 16 年前
        1
  •  19
  •   Telemachus MrJames    16 年前

    而不是移除 strict (!)为什么不直接编写代码呢? 严格的 干净?

    my ($mday, $mon, $year) = (localtime(time))[3, 4, 5];
    
    $mon  += 1;
    $year += 1900;
    
    printf "%02d/%02d/%02d\n", $mday, $mon, $year % 100;
    

    也许更好(因为对一个用bash提问的人比较熟悉):

    # At the top, under use strict;
    use POSIX qw/strftime/;
    
    # then later...
    my $date = strftime "%d/%m/%y", localtime;
    print "$date\n";
    

    有趣的巧合: Perl Training Australia 发布半常规 tips (你可以通过电子邮件或在线获取),今天 a new one strftime .

        2
  •  9
  •   Dave Rolsky    16 年前

    你也可以用 DateTime 以及相关的模块,当然,对于这样的小脚本来说,这是完全多余的。但是对于一个更大的应用程序,你应该使用可靠的模块,而不是做任何事情。对于记录,使用datetime可以写:

    DateTime->today()->strftime('%d/%m/%y');
    

    或者您可以使用更现代的CLDR格式语言:

    DateTime->today->format_cldr('dd/MM/YYYY');
    
        3
  •  2
  •   Anand    16 年前
    @time = localtime(time);
    $mday = $time[3];
    $mon = $time[4]+1;
    $year = $time[5]+1900;
    print "$mday/$mon/$year\n";
    

    应该这样做。

    编辑:

    printf "%02d/%02d/%4d",$mday,$mon+1,$year+1900";
    

    也要注意用零填充。