روبي Time.parse يعطيني خطأ خارج النطاق
-
03-07-2019 - |
سؤال
أنا أستخدم 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.
ربما لا تحتاج إليها لحل هذه المشكلة ولكني ما زلت أوصي بمراجعة محلل التاريخ/الوقت للغة الطبيعية مزمن, لقد وفر لي الكثير من العمل عدة مرات.
من المحتمل أن يكون تنسيق يوم-شهر-سنة، لذا تحاول القيمة الأولى تحديد اليوم الخامس من الشهر الرابع عشر.