سؤال

هذا السؤال هو الجانب الآخر من السؤال يسأل،"كيف يمكنني حساب النسبية الوقت ؟ ".

بالنظر إلى بعض المدخلات البشرية لفترة من الوقت النسبي ، كيف يمكن تحليل ذلك ؟ افتراضيا سوف يقابل من DateTime.Now(), ولكن يمكن اختياريا تعويض من آخر DateTime.

(تفضل الأجوبة في C#)

مثال الإدخال:

  • "في 20 دقيقة"
  • "5 ساعات"
  • "3 2m"
  • "الاسبوع القادم"

تحرير: لنفترض يمكننا تحديد بعض القيود المفروضة على المدخلات.هذا النوع من التعليمات البرمجية سيكون شيء مفيد لديك على شبكة الإنترنت.

هل كانت مفيدة؟

المحلول

هذا بناء DSL (المجال لغة معينة) عن تاريخ التعامل.أنا لا أعرف إذا كان شخص ما قد قام واحد .صافي ولكن بناء DSL هي واضحة إلى حد ما:

  1. تعريف اللغة على وجه التحديد ، والتي أشكال المدخلات سوف تقبل وماذا ستفعل مع الغموض
  2. التركيب النحوي للغة
  3. بناء آلة الدولة المحدودة أن يوزع اللغة الخاصة بك إلى عملي AST

يمكنك أن تفعل كل هذا بنفسك (مع مساعدة من التنين الكتاب, على سبيل المثال) أو مع مساعدة من أدوات التأثير ، كما هو موضح في هذا الرابط.

فقط من خلال التفكير الجاد حول إمكانيات لديك فرصة جيدة, مع مساعدة من واجهة جيدة أمثلة تغطي أكثر من نصف الفعلية المدخلات التطبيق الخاص بك سوف تتلقى.إذا كنت تهدف إلى قبول كل إنسان يمكن أن ربما نوع, يمكنك تسجيل الإدخال تحديد غامضة ومن ثم إضافتها إلى قواعد اللغة ، كلما يمكن تفسيرها, كما أن هناك من الأشياء التي سوف تكون بطبيعتها الغامضة.

نصائح أخرى

بحث جوجل تتحول parsedatetime مكتبة (المرتبطة تشاندلر المشروع) ، والذي يهدف إلى القيام بذلك بالضبط.انها مفتوحة المصدر (رخصة أباتشي) و مكتوب في بيثون.يبدو أن متطورة جدا-من الصفحة الرئيسية:

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, لذا يمكن استخدامه مع .صافي.إذا كنت تريد على وجه التحديد C# الحل, هل يمكن أن أكتب شيئا على أساس خوارزميات أنها تستخدم...

كما يأتي مع مجموعة كاملة من وحدة الاختبارات.

وهذا هو الأرجح ليست كلها مفيدة بما أنك تتحدث c# ولكن بما أن لا أحد يذكر ذلك حتى الآن يمكنك محاولة إلقاء نظرة على php ممتازة و جنونيا الأم strtotime وظيفة

روبي الناس حاولوا معالجة هذا مع محلل يسمى المزمن.

شاهدت بالمعلومات عرض الفيديو مؤخرا على كيفية المؤلف ذهب عن حل هذه المشكلة.

هذا: http://www.codeproject.com/KB/edit/dateparser.aspx هي قريبة إلى حد ما إلى ما كنت تحاول تحقيق.ليس الحل الأكثر أناقة ، ولكن بالتأكيد قد توفر لك بعض العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top