سؤال

أنا أستخدم Time.parse لإنشاء كائن Time من سلسلة.

لسبب ما

Time.parse("05-14-2009 19:00")

يسبب حجة لدينا من خطأ النطاق، في حين

Time.parse("05-07-2009 19:00")

لا

أيه أفكار؟

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

المحلول

أعتقد أنه من المتوقع أن يكون الجزء الثاني من السلسلة (الرقم 14) هو الشهر.

قد يساعدك هذا الرابط في تحليله.

نصائح أخرى

إذا كنت تعرف تنسيق السلسلة استخدم:

Time.strptime(date, format, now=self.now) {|year| ...}   

http://www.ruby-doc.org/core-1.9/classes/Time.html#M000266

سوف يحل مشكلتك وربما سيكون أسرع من Time.parse.

يحرر:

يبدو أنهم أخذوا strptime من فئة الزمن، لكنه دعا Date.strptime على أي حال.إذا كنت تستخدم Rails، يمكنك القيام بما يلي:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time

إذا كنت تستخدم الياقوت النقي فأنت بحاجة إلى:

require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")

Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min], 
         d[:sec], d[:sec_fraction], d[:zone])

أنظر أيضا: مشكلات تنسيق التاريخ والوقت في Ruby on Rails.

إنه بسبب الاستدلال Time#parse.

ويرجع ذلك إلى التنسيقات الأنجلو أمريكية.

مع الشرطات '-' فإنه يتوقع mm-dd-yyyy، ومع الشرطات '/' فإنه يتوقع dd/mm/yyyy.

هذا السلوك التغييرات عمدا في 1.9.لإنجاز معايير تاريخ اليورو، ISO وJP.

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

من المحتمل أن يكون تنسيق يوم-شهر-سنة، لذا تحاول القيمة الأولى تحديد اليوم الخامس من الشهر الرابع عشر.

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