تاريخ خاطئ مع Ruby Date.Today و DateTime.now
سؤال
لقد قمت بتثبيت Ruby-1.8.6-P383 مع RVM. نظام Ruby هو 1.9.1_p378-1
أحصل على تاريخ خاطئ من Date.Today و DateTime.now عند استخدام Ruby 1.8 .. في حين أن الوقت. الآن صحيح:
irb(main):002:0> DateTime.now.to_s
=> "2126--1-10618T11:23:43+00:00"
irb(main):004:0> Date.today.to_s
=> "2126--1-10618"
irb(main):005:0> Time.now
=> Thu Jan 28 11:55:27 +0000 2010
كل شيء على ما يرام إذا قمت بالتبديل إلى Ruby 1.9:
irb(main):003:0> DateTime.now.to_s
=> "2010-01-28T11:58:51+00:00"
irb(main):004:0> Date.today.to_s
=> "2010-01-28"
irb(main):005:0> Time.now
=> 2010-01-28 11:59:05 +0000
أي نصيحة حول كيفية الحصول على DateTime للعمل بشكل صحيح في Ruby 1.8 سيكون موضع تقدير أكثر!
المحلول
لقد تعثرت على مشكلة مماثلة وحصلت على 3 حلول مختلفة ، والتي جربتها 2 وعملت. اقرأ المزيد عنها من هنا:
http://www.ruby-forum.com/topic/210647
جارمو
نصائح أخرى
يبدو أن السلسلة التي تم إرجاعها مكسورة للغاية: 1) العام هو 2126 ، ii) هناك واصلين بين السنة والشهر ، والثاني) في اليوم 10618.
اي الانظمة الاساسية تعتمد؟ ما هي المنطقة الزمنية التي أنت عليها (المثال يعني أنك في GMT)؟
أنا على WinXP و Ruby 1.8.6-P111 يعطي نفس النتيجة في جميع الحالات الثلاث.
تحرير: لقد فعلت بعض الحفر في رمز مصدر روبي (Date
و DateTime
يتم تعريفها في lib/date.rb
).
لقد أتضح أن Date.today
المكالمات داخليًا Time.now.__send__(:to_date)...
, ، لذلك ربما يجب أن تحاول الاتصال Time.now.__send__(:to_date).to_s
في irb
ومقارنة الإخراج Time.now.to_s
من أجل تضييق المشكلة.
Date.today
أيضا مكالمات .new_start(...)
على أنشأت Date
مثيل لذلك ربما يكون هذا يفسد التاريخ في قضيتك.
لست متأكدًا مما إذا كنت تقوم بتشغيل الأشياء محليًا ، أو على الخادم ، لكنني أعتقد أن روبي قد يأخذ تاريخ الخادم ، والذي قد يكون في منطقة زمنية مختلفة عما أنت عليه ، وبالتالي ، يظهر بشكل مختلف.