2008-09-10 17 views
12

यह प्रश्न पूछताछ के दूसरे पक्ष है, "How do I calculate relative time?"।रिश्तेदार समय का विश्लेषण कैसे करें?

किसी सापेक्ष समय के लिए कुछ मानव इनपुट को देखते हुए, आप इसे कैसे पार्स कर सकते हैं? डिफ़ॉल्ट रूप से आप DateTime.Now() से ऑफसेट करेंगे, लेकिन वैकल्पिक रूप से DateTime से ऑफसेट कर सकते हैं।

(सी # में जवाब पसंद करते हैं)

उदाहरण इनपुट:

  • "20 मिनट में"
  • "5 घंटे पहले"
  • "3h 2m"
  • "अगले सप्ताह"

संपादित करें: मान लीजिए कि हम इनपुट पर कुछ सीमाएं परिभाषित कर सकते हैं। इस तरह का कोड वेब पर बाहर निकलने के लिए एक उपयोगी बात होगी।

+0

.NET के लिए जवाब हैं [चतुर मार्गों को पार्स करने के लिए चालाक तरीका सी #] (http://stackoverflow.com/a/25588407) –

उत्तर

3

यह डेट हैंडलिंग के लिए एक डीएसएल (डोमेन विशिष्ट भाषा) का निर्माण कर रहा है। मैं नहीं जानता कि यदि किसी नेट के लिए एक किया है, लेकिन एक डीएसएल के निर्माण काफी सीधा है:

  1. ठीक भाषा है, जो इनपुट रूपों आप स्वीकार करेंगे और क्या आप अस्पष्टता के साथ क्या होगा परिभाषित
  2. भाषा
  3. परिमित राज्य मशीन है कि एक कार्रवाई एएसटी

आप खुद वह सब कर सकते हैं (the Dragon Book की मदद से, उदाहरण के लिए) में अपनी भाषा को पार्स करता बिल्ड के लिए या की मदद से व्याकरण का निर्माण शो के रूप में प्रभाव के लिए उपकरण n link में।

अच्छे यूआई उदाहरणों की मदद से, आपके पास एक अच्छा मौका है, जो आपके आवेदन को प्राप्त होने वाले वास्तविक इनपुट के आधे से अधिक कवर करने की संभावनाओं के बारे में कठिन सोचकर। यदि आप संभवतः एक मानव को संभवतः सब कुछ स्वीकार कर सकते हैं, तो आप संदिग्ध के रूप में निर्धारित इनपुट रिकॉर्ड कर सकते हैं और फिर उन्हें व्याकरण में जोड़ सकते हैं, जब भी उन्हें व्याख्या की जा सकती है, क्योंकि ऐसी चीजें हैं जो स्वाभाविक रूप से संदिग्ध होंगी।

+0

.NET के लिए nChronic (https://github.com/robertwilczynski/nChronic) देखें । – Larsenal

-1

यह: http://www.codeproject.com/KB/edit/dateparser.aspx जो आप पूरा करने की कोशिश कर रहे हैं उसके काफी करीब है। सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन निश्चित रूप से आपको कुछ काम बचा सकता है।

7

एक Google खोज parsedatetime लाइब्रेरी (Chandler project से जुड़ी) को बदलती है, जिसे ठीक से करने के लिए डिज़ाइन किया गया है। यह खुला स्रोत (अपाचे लाइसेंस) है और पायथन में लिखा गया है। यह काफी परिष्कृत हो रहा है - मुखपृष्ठ से:, निम्नलिखित

parsedatetime, पार्स करने में सक्षम है उदाहरण के लिए:

* Aug 25 5pm 
* 5pm August 25 
* next saturday 
... 
* tomorrow 
* next thursday at 4pm 
* at 4pm 
* eod 
* in 5 minutes 
* 5 minutes from now 
* 5 hours before now 
* 2 days from tomorrow 

चूंकि यह शुद्ध पायथन में लागू और नहीं करता है किसी भी फैंसी का उपयोग करें, IronPython के साथ संगत होने का एक अच्छा मौका है, इसलिए आप इसे .NET के साथ उपयोग कर सकते हैं। यदि आप विशेष रूप से एक सी # समाधान चाहते हैं, तो आप उनके द्वारा उपयोग किए जाने वाले एल्गोरिदम के आधार पर कुछ लिख सकते हैं ...

यह यूनिट परीक्षणों के पूरे समूह के साथ आता है।

+0

मैं इसे सी # से उपयोग करने में सफल रहा था और यह काफी अच्छी तरह से काम करता है। अगर कोई दिलचस्पी लेता है, तो मैं इसे कहीं भी अपलोड कर सकता हूं। – VitalyB

0

रूबी लोगों ने क्रोनिक नामक एक पार्सर से निपटने का प्रयास किया है।

मैं कैसे लेखक इस समस्या को हल के बारे में चला गया पर हाल ही में एक जानकारीपूर्ण वीडियो प्रस्तुति देखा था।

+0

वीडियो का एक लिंक बहुत अच्छा होगा। – Larsenal

0

यह संभावना है नहीं कि सभी सहायक जब से तुम ग # बात कर रहे हैं, लेकिन कोई भी यह अभी तक का उल्लेख किया जब से तुम php उत्तम और पूरी तरह से पागल देशी strtotime समारोह

पर एक नज़र लेने के लिए कोशिश कर सकते हैं
संबंधित मुद्दे