2008-12-29 17 views
5

मैं वर्तमान समय की तुलना करना चाहता हूं और पर्ल में फ़ाइल निर्माण समय की तुलना करना चाहता हूं लेकिन दोनों अलग प्रारूप में हैं। स्थानीयसमय इस प्रारूप में:मैं पर्ल में वर्तमान समय में फ़ाइल निर्माण समय की तुलना कैसे कर सकता हूं?

22116291110813630 

और फ़ाइल निर्माण समय

Today, December 29, 2008, 2:38:37 PM 

है मैं की तुलना कैसे जो एक अधिक से अधिक और उनके अंतर है?

+1

: http://www.perl.com/doc/manual/html/pod/perlfunc/stat.html कैसे दिनांकों कन्वर्ट करने के लिए की – some

+0

जानकारी: http://www.perl.com /pub/a/2003/03/13/datetime.html – some

+0

आपके प्रश्न का उत्तर है: उन्हें उसी प्रारूप में कनवर्ट करें। मैं सुझाव देता हूं कि "आज, 2 9 दिसंबर, 2008" एक टाइमस्टैम्प (युग के बाद से (मिली) सेकंड की संख्या में परिवर्तित)। फिर यह दो संख्याओं की एक साधारण तुलना – some

उत्तर

3

localtime सूची संदर्भ में मूल्यों की एक सूची देता है। the localtime documentation या perlcheat देखें। आपके उदाहरण में, ऐसा लगता है कि उन सभी को एक साथ मिलाया गया है। स्केलर संदर्भ में, यह Mon Dec 29 03:16:33 2008 जैसे स्वरूपित स्ट्रिंग देता है। अधिकांश प्लेटफ़ॉर्म पर, फ़ाइल इरोड चेंज टाइम कुछ युग के बाद से stat से कई सेकंड के रूप में वापस कर दिया जाएगा। आपको सीधे time() (localtime()) के परिणामस्वरूप इसकी तुलना करने में सक्षम होना चाहिए।

13

आप मूल्यों की तुलना करना चाहते हैं, तो आप नंबर पर आप अदिश संदर्भ में localtime से मिला है और inode परिवर्तन समय है कि आप stat से प्राप्त कर सकते हैं का उपयोग करना चाहें:

   ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, 
        $atime,$mtime,$ctime,$blksize,$blocks) 
         = stat($filename); 

जहां:

 
       0 dev  device number of filesystem 
       1 ino  inode number 
       2 mode  file mode (type and permissions) 
       3 nlink number of (hard) links to the file 
       4 uid  numeric user ID of file's owner 
       5 gid  numeric group ID of file's owner 
       6 rdev  the device identifier (special files only) 
       7 size  total size of file, in bytes 
       8 atime last access time in seconds since the epoch 
       9 mtime last modify time in seconds since the epoch 
       10 ctime inode change time in seconds since the epoch (*) 
       11 blksize preferred block size for file system I/O 
       12 blocks actual number of blocks allocated 

तो आप चाहते हैं क्षेत्र 9:

 

$mtime = (stat $filename)[9]; 
$current_time = time; 

$diff = $current_time - $mtime; 
 
+0

मुझे जानकारी देने के लिए धन्यवाद। मुझे लगता है कि यह आपकी मार्गदर्शिका के लिए secs.anyway धन्यवाद में भिन्नता दे रहा है। नया साल मुबारक हो –

14

यह stat() और समय()/localtime() का उपयोग करने से भी आसान है।

my $diff = -M $filename; 

-एम ऑपरेटर फ़ाइल की "आयु" (प्रोग्राम की शुरुआत के दिनों से) में लौटाता है। यह -X functions या perldoc -f -X के तहत प्रलेखित है।

+3

मुझे पता है कि यह एक पुराना धागा है लेकिन मैं वैसे भी एक उत्तर पोस्ट कर रहा हूं। -M अंतिम संशोधन की "आयु" फ़ाइल निर्माण नहीं देता है। -सी ने अनुरोध के अनुसार सही मूल्य दिया होगा, लेकिन मैं केवल एक-लाइनर में -X फ़ंक्शंस (http://perldoc.perl.org/functions/-X.html) का उपयोग करता हूं और शेष समय का उपयोग करता हूं। –

0

ये दो कार्य जिमट के जवाब के लिए धन्यवाद हैं। फाइलेज एक पूर्णांक के रूप में सेकेंड की संख्या प्रिंट करता है, जो कि एक खोल में उपयोग के लिए सही होता है, जब से इसे बनाया गया था। फ़ाइलेज उपर्युक्त प्रश्न का उत्तर है, जबकि डेटाेज फ़ाइल की सामग्री के लिए समान प्रिंट करता है क्योंकि यह वह उत्तर है जिसे मैं ढूंढ रहा था, मुझे यकीन है कि ये दोनों उपयोगी होंगे।

function fileage { 
    perl -e 'printf "%i\n", 60 * 60 * 24 * -C "'"${1:?Must provide a file name}"'"' 
} 

function dataage { 
    perl -e 'printf "%i\n", 60 * 60 * 24 * -M "'"${1:?Must provide a file name}"'"' 
} 
ब्याज की हो सकता है कि
संबंधित मुद्दे

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