2011-08-12 13 views
5

मैं यहां ऐसा करने की कोशिश कर रहा हूं कि दिन या महीना एक अंक है, में शून्य जोड़ने के लिए। अभी यह 201,188 के रूप में की तारीख से बाहर प्रिंट, और मैं के लिए 20110808.दिनांक :: कैल्क - दिन और महीना प्रारूप

#!/usr/bin/perl 
use Date::Calc qw(Add_Delta_Days); 
my (undef, undef, undef, $day, $month, $year) = localtime(); 
$year +=1900; 
$month +=1; 
($year, $month, $day) = Add_Delta_Days($year, $month, $day, -3) 
if ($month =~ /\d{1}/){ 
    s/$month/0$month/ 
} 
if ($day =~/\d{1}/){ 
    s/$day/0$day/ 
} 
print $year,$month,$day; 
+0

आपका अगर-बयान मतलब नहीं है। सबसे पहले, वे हमेशा एक अंक (1 या 2) रखेंगे, इसलिए अगर-कथन हमेशा सत्य होंगे। दूसरा, आप '$ _' चर पर प्रतिस्थापन कर रहे हैं, न कि' $ माह' और '$ दिन'। – TLP

+0

@ टीएलपी, उन्होंने कोड अब पोस्ट किया है, जो काम नहीं करता है (आपके कारणों के कारण)। यही उसका सवाल है। आपकी टिप्पणी इसके बजाय एक जवाब होना चाहिए। – cjm

+0

असल में मुझे लगता है कि @ टीएलपी ने कुछ ऐसा बताया जो मुझे समझने की जरूरत थी। अगर कथन और $ _ डिफ़ॉल्ट चर के बारे में। – capser

उत्तर

2

रहा हूँ अगर ($ महीने < 10)
{
          $ महीने = "0 $ महीने" ;
}

अगर ($ दिन < 10)
{
          $ दिन = "0 $ दिन";
} printf

+0

हाँ मुझे लगता है कि यह करने का यह एक अच्छा सरल और संक्षिप्त तरीका है - धन्यवाद – capser

+2

कृपया नहीं। यदि आप इसका परिणाम किसी अन्य जगह पर रखते हैं तो पर्ल फिर से अग्रणी शून्य को छोड़ देगा क्योंकि यह स्ट्रिंग को एक संख्या के रूप में संभालेगा। स्वरूपित मुद्रण के लिए printf का प्रयोग करें। – Olfan

4

उपयोग के बजाय:

C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,4" 
2011-05-04 
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,5,12" 
2011-05-12 
C:\perl>perl -we "printf qq(%d-%02d-%02d), 2011,22,12" 
2011-22-12 
+1

मैं कहूंगा कि '% 02d''% .2d' से अधिक मूर्खतापूर्ण है। –

+0

@ किथ धन्यवाद, अभी तय है। – TLP

+0

और सिर्फ समरूपता के लिए, मैं आमतौर पर '"% 04d-% 02d-% 02d "लिखता हूं। (एक मामूली बिंदु, और वह जो वर्षों के लिए कोई वास्तविक अंतर नहीं बनाता> = 1000.) –

5

आप Date::Calc उपयोग करने के लिए खुश हैं, तो क्यों DateTime का उपयोग नहीं:

printf "%d-%02d-%02d", $year, $month, $day; 

उत्पादन जैसे देता है?

use DateTime; 
my $date = DateTime->now; 
$date->subtract(days => 3); 
print $date->ymd; 

वास्तव में आप कम कर सकते हैं कि करने के लिए:

print DateTime->now->subtract(days => 3)->ymd 
+0

+1 अच्छा है, मुझे इसके बारे में सोचना चाहिए था। ;) – TLP

संबंधित मुद्दे