如何在Perl中格式化日期?

如何在Perl中格式化日期?,perl,date,templates,Perl,Date,Templates,我正在修改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 $headerPa

我正在修改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;
#/usr/bin/perl-w
#为标题插入HeaderDoc注释
#
#为标题插入模板HeaderDoc注释。
严格使用;
#获取文档的路径
我的$headerPath=
我应该这样做

编辑:


也将处理带零的填充。

与其删除
strict
(!),为什么不将代码
strict
清理干净

my ($mday, $mon, $year) = (localtime(time))[3, 4, 5];

$mon  += 1;
$year += 1900;

printf "%02d/%02d/%02d\n", $mday, $mon, $year % 100;
也许更好(因为对于问Bash的人来说更熟悉):

有趣的巧合:发布半常规(你可以通过电子邮件或在线获得),就在今天,在strftime上有
strftime

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

DateTime->today()->strftime('%d/%m/%y');
或者您可以使用更现代的CLDR格式语言:

DateTime->today->format_cldr('dd/MM/YYYY');

这给我带来了一些错误:“全局符号“$sec”需要显式的包名“你明白重点了吗?对代码做了一些更改。”。但是似乎对我来说没有你所得到的错误@trex279:仍然有一些关于$sec和其他未使用的变量的警告,但似乎做到了这一点,thx。在第一个列表之前使用“my”来声明变量,而不是删除use strict,这通常被认为不是一个好主意。POSIX的strftime是格式化日期的正确方法。。。Date::Manip是非常强大的,但是它的许多特性都有很高的性能损失。Pesonal,我通常在这里使用第一个示例。@spolson:Yup,Date::Manip文档本身有一整节解释为什么您通常不需要/想要Date::Manip。我通常使用POSIX的strftime,因为它会自动处理我可能会忘记或弄糟的细节(加1到月,加1900到年)。
# At the top, under use strict;
use POSIX qw/strftime/;

# then later...
my $date = strftime "%d/%m/%y", localtime;
print "$date\n";
DateTime->today()->strftime('%d/%m/%y');
DateTime->today->format_cldr('dd/MM/YYYY');