2009-02-22 101 views
6

我正在修改Xcode中的预先存在的脚本来自定义我的文件头。脚本是Perl,它不是我最好的语言。 :)如何在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; 

我刚刚修改了打印命令,所以不要问我的代码的其余部分:)

回答

19

而不是删除strict(!),为什么不只是使代码strict干净?

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

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

printf "%02d/%02d/%02d\n", $mday, $mon, $year % 100; 

甚至更​​好(因为更熟悉寻找的人谁问猛砸而言):

# 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(您可以通过电子邮件或网上让他们),并且就在今天strftime上有a new one

2
@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"; 

会照顾将使用零填充了。

+0

它gaves我一些错误:“全局符号‘$秒’需要明确的包名“你看到了点? – claf 2009-02-22 16:49:25

+0

对代码做了一些更改。但似乎在为我工作没有你得到的错误。 – 2009-02-22 17:04:43

9

你也可以使用DateTime和相关模块,这当然是完全矫枉过正的一个小脚本。但是对于一个更大的应用程序,你应该使用可靠的模块,而不是一帆风顺。为了记录在案,以日期时间你会写:

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

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

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