2008-11-17 10 views
10

मुझे यह जानना अच्छा लगेगा कि पर्ल में "मानव स्वरूपित" तिथियों को पार्स करने के लिए कोई मॉड्यूल है या नहीं। मेरा मतलब है "कल", "मंगलवार", "अगले सप्ताह", "1 घंटा पहले" जैसी चीजें।मैं पर्ल के साथ सापेक्ष तिथियों का विश्लेषण कैसे कर सकता हूं?

सीपीएएन के साथ मेरा शोध सुझाव देता है कि ऐसा कोई मॉड्यूल नहीं है, तो आप एक बनाने के बारे में कैसे जाएंगे? एनएलपी इस के लिए शीर्ष पर रास्ता है।

उत्तर

23

Date::Manip बिल्कुल यह करता है।

#!/usr/bin/perl 

use strict; 
use Date::Manip; 

while (<DATA>) 
{ 
    chomp; 
    print UnixDate($_, "%Y-%m-%d %H:%M:%S"), " ($_)\n"; 
} 

__DATA__ 
today 
yesterday 
tomorrow 
last Tuesday 
next Tuesday 
1 hour ago 
next week 

निम्नलिखित में से कौन उत्पादन में परिणाम है:

2008-11-17 15:21:04 (today) 
2008-11-16 15:21:04 (yesterday) 
2008-11-18 15:21:04 (tomorrow) 
2008-11-11 00:00:00 (last Tuesday) 
2008-11-18 00:00:00 (next Tuesday) 
2008-11-17 14:21:04 (1 hour ago) 
2008-11-24 00:00:00 (next week) 

UnixDate Date::Manip द्वारा प्रदान कार्यों में से एक है, पहला तर्क में दिनांक/समय है

यहाँ एक उदाहरण कार्यक्रम है मॉड्यूल का समर्थन करने वाला कोई भी प्रारूप, दूसरा तर्क वर्णन करता है कि दिनांक/समय को कैसे प्रारूपित किया जाए। ऐसे अन्य कार्य हैं जो इन "मानव" तिथियों को सिर्फ प्रारूपित किए बिना, प्रारूपण किए बिना, डेल्टा गणनाओं में उपयोग किए जाने के लिए,

+1

आह, अच्छे पुराने दिनांक :: Manip ... तुम कैसे नहीं एक मॉड्यूल का उपयोग कर से बाहर बात करने के लिए इतनी मेहनत की कोशिश करता है प्यार कर सकते हैं यह? –

+0

बिल्कुल वही जो मैं खोज रहा था, लेकिन (हमेशा की तरह) मुझे नहीं पता था कि सवाल कैसे वाक्यांशित किया जाए। धन्यवाद। – andymurd

+0

मुझे लगता है कि डेटटाइम वह समुदाय है जो अब व्यापक तिथि और समय समाधान के रूप में सबसे ज्यादा धक्का देता है। Datetime.perl.org देखें और यह आलेख http://www.perl.com/pub/a/2003/03/13/datetime.html – draegtun

-2

मुझे लगता है कि आपके पास संदर्भ है। एनएलपी यहां कैसे मदद कर सकता है? एक जंगली अनुमान के रूप में आप केवल निकटतम तारीख ढूंढ सकते हैं जो कि एक सटीक तारीख है (आज के सापेक्ष नहीं) और आज से संबंधित/टॉमोरो/कल का उपयोग करें।

9

आपको DateTime::Format परिवार, विशेष रूप से DateTime::Format::Natural पर देखना दिलचस्प लगेगा। एक बार जब आप डेटटाइम ऑब्जेक्ट में अपनी तिथि/समय पार्स कर लेते हैं, तो आप विभिन्न तरीकों से पूरे समूह में इसका उपयोग और मूल्यांकन कर सकते हैं।

यहाँ एक नमूना कार्यक्रम है:

use strict; 
use warnings; 

use DateTime::Format::Natural; 

my($parser) = DateTime::Format::Natural->new; 

while (<>) { 

    chomp; 
    my($dt) = $parser->parse_datetime($_); 

    if ($parser->success) { 

     print join(' ', $dt->ymd, $dt->hms) . "\n"; 
    } 
    else { 

     print $parser->error . "\n"; 
    } 
} 

उत्पादन:

tomorrow 
2008-11-18 21:48:49 
next Tuesday 
2008-11-25 21:48:53 
1 week from now 
2008-11-24 21:48:57 
1 hour ago 
2008-11-17 20:48:59 

TMTOWTDI :)

-स्टीव

+0

डेटटाइम का सुझाव देने के लिए धन्यवाद। हाँ, एक ट्रू सिस्टम! – Anirvan

2

व्यक्तिगत रूप से, मैं हमेशा उपयोग किया है Time::ParseDate इस के लिए। यह मैंने कोशिश की हर प्रारूप को काफी समझता है।

निरपेक्ष तिथि प्रारूप

Dow, dd Mon yy 
    Dow, dd Mon yyyy 
    Dow, dd Mon 
    dd Mon yy 
    dd Mon yyyy 
    Month day{st,nd,rd,th}, year 
    Month day{st,nd,rd,th} 
    Mon dd yyyy 
    yyyy/mm/dd 
    yyyy-mm-dd  (usually the best date specification syntax) 
    yyyy/mm 
    mm/dd/yy 
    mm/dd/yyyy 
    mm/yy 
    yy/mm  (only if year > 12, or > 31 if UK) 
    yy/mm/dd (only if year > 12 and day < 32, or year > 31 if UK) 
    dd/mm/yy (only if UK, or an invalid mm/dd/yy or yy/mm/dd) 
    dd/mm/yyyy (only if UK, or an invalid mm/dd/yyyy) 
    dd/mm  (only if UK, or an invalid mm/dd) 

सापेक्ष तिथि प्रारूप:

count "days" 
    count "weeks" 
    count "months" 
    count "years" 
    Dow "after next" 
    Dow "before last" 
    Dow      (requires PREFER_PAST or PREFER_FUTURE) 
    "next" Dow 
    "tomorrow" 
    "today" 
    "yesterday" 
    "last" dow 
    "last week" 
    "now" 
    "now" "+" count units 
    "now" "-" count units 
    "+" count units   
    "-" count units 
    count units "ago" 

निरपेक्ष समय प्रारूप:

hh:mm:ss[.ddd] 
    hh:mm 
    hh:mm[AP]M 
    hh[AP]M 
    hhmmss[[AP]M] 
    "noon" 
    "midnight" 

सापेक्ष समय प्रारूप:

count "minutes"   (count can be franctional "1.5" or "1 1/2") 
    count "seconds" 
    count "hours" 
    "+" count units 
    "+" count 
    "-" count units 
    "-" count 
    count units "ago" 

समय-क्षेत्र प्रारूप:

[+-]dddd 
    GMT[+-]d+ 
    [+-]dddd (TZN) 
    TZN 

विशेष प्रारूप:

[ d]d/Mon/yyyy:hh:mm:ss [[+-]dddd] 
    yy/mm/dd.hh:mm 
संबंधित मुद्दे

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