2009-02-22 15 views
6

मैं अपने फ़ाइल हेडर को कस्टमाइज़ करने के लिए एक्सकोड में एक पूर्व-मौजूदा स्क्रिप्ट को संशोधित कर रहा हूं। लिपि पर्ल है और यह मेरा सबसे अच्छा लंगेज नहीं है। :)मैं पर्ल में तिथियों को कैसे प्रारूपित करूं?

मुझे सिर्फ डीडी/एमएम/वाई प्रारूप में शीर्षलेख में वर्तमान दिनांक डालने की आवश्यकता है।

#! /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 (आप उन्हें ईमेल के माध्यम से या ऑनलाइन प्राप्त कर सकते हैं), और आज a new onestrftime पर है।

+0

पॉज़िक्स का स्ट्रेटटाइम तारीखों को प्रारूपित करने का सही तरीका है ... या यह करने के लिए एक और वर्ग, दिनांक :: मणिप। – Powerlord

+0

दिनांक :: मणिप बहुत शक्तिशाली है, लेकिन इसकी कई सुविधाओं में उच्च प्रदर्शन जुर्माना है। व्यक्तिगत रूप से, मैं आमतौर पर यहां पहले उदाहरण का उपयोग करता हूं। – spoulson

+0

@ स्पॉल्सन: यूप, दिनांक :: मणिप प्रलेखन में स्वयं का एक संपूर्ण खंड है जो आपको समझाता है कि आपको आमतौर पर दिनांक/मनीप की आवश्यकता क्यों नहीं है। मैं आम तौर पर पीओएसईक्स के स्ट्रैटाइम का उपयोग करता हूं क्योंकि यह स्वचालित रूप से उन विवरणों का ख्याल रखता है जिन्हें मैं अन्यथा भूल सकता हूं या गड़बड़ कर सकता हूं (1 से 1 महीने, 1 9 00 से साल तक) जोड़ सकता हूं। – Telemachus

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

+0

ने कोड में कुछ बदलाव किए हैं। लेकिन आप जो त्रुटि प्राप्त कर रहे हैं उसके बिना मेरे लिए काम कर रहे हैं। –

+0

को सख्त उपयोग करने का प्रयास करें; –

9

आप DateTime और संबंधित मॉड्यूल का भी उपयोग कर सकते हैं, जो कि इस तरह की छोटी लिपि के लिए पूरी तरह से ओवरकिल है। लेकिन एक बड़े ऐप के लिए, आपको लंबे समय तक सब कुछ करने के बजाय ठोस मॉड्यूल का उपयोग करना चाहिए। रिकॉर्ड के लिए DATETIME, साथ आप लिखते हैं:

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

या आप और अधिक आधुनिक CLDR प्रारूप भाषा इस्तेमाल कर सकते हैं:

DateTime->today->format_cldr('dd/MM/YYYY'); 
संबंधित मुद्दे