พฤติกรรม Ruby แปลก ๆ ในการแปลง DateTime เป็นเวลา

เป้าหมายของฉันคือการได้รับอินสแตนซ์ Time จากอินสแตนซ์ DateTime

ก่อนหน้านี้มีการพูดคุยเรื่องนี้แล้ว และฉันยังคงสับสน: แปลงเป็น/จาก วันที่และเวลาใน Ruby

สำหรับฉันใน irb ที่ใช้งาน Ruby 1.9.3p0 (30-10-2554 แก้ไข 33570) [x86_64-darwin11.2.0] สิ่งต่าง ๆ ทำงานได้อย่างสมบูรณ์แบบ

1.9.3p0 :001 > require 'Date'
 => true 
1.9.3p0 :002 > require 'Time'
 => true 
1.9.3p0 :003 > t=DateTime.now
 => #<DateTime: 2012-07-01T01:57:32+05:30 ((2456109j,73652s,621060000n),+19800s,2299161j)> 
1.9.3p0 :004 > t2=t.to_time
 => 2012-07-01 01:57:32 +0530 
1.9.3p0 :005 > t.class
 => DateTime 
1.9.3p0 :006 > t2.class
 => Time 
1.9.3p0 :007 > 

อย่างไรก็ตาม เมื่อทำงานกับ Rails console v 3.2.3 บนแพลตฟอร์ม Ruby เดียวกัน

1.9.3p0 :001 > t=DateTime.now
 => Sun, 01 Jul 2012 02:00:00 +0530 
1.9.3p0 :002 > t.class
 => DateTime 
1.9.3p0 :003 > t2=t.to_time
 => Sun, 01 Jul 2012 02:00:00 +0530
1.9.3p0  > t2.class
 => DateTime

จะต้องทำอย่างไรเพื่อรับอินสแตนซ์ Time จาก DateTime ใน Rails


person Nitish Upreti    schedule 30.06.2012    source แหล่งที่มา


คำตอบ (1)


ตามเอกสารประกอบ Rails สำหรับ DateTime.to_time()

หาก self มีออฟเซ็ตอื่นที่ไม่ใช่ 0 self จะถูกส่งคืนโดยไม่มีการเปลี่ยนแปลง

หากต้องการเปลี่ยนเป็นออฟเซ็ต 0 ให้ใช้ DateTime.utc()

1.9.3p194 :005 > t3=t2.utc
 => Sat, 30 Jun 2012 20:43:21 +0000 
1.9.3p194 :006 > t3.offset
 => (0/1) 
1.9.3p194 :007 > t4=t3.to_time
 => 2012-06-30 20:43:21 UTC 
1.9.3p194 :008 > t4.class
 => Time 
person creemama    schedule 30.06.2012
comment
ขอบคุณสำหรับคำตอบ. ฉันเกาหัวของฉันจริงๆกับสิ่งนี้และกำลังมองหารายงานข้อผิดพลาดกับ Ruby 1.9 เมื่อกลายเป็นการตัดสินใจที่น่าสยดสยองโดยไลบรารี Rails ที่จะทำลายอินเทอร์เฟซ Ruby ที่ซ่อนอยู่ - person Jesse Clark; 02.02.2013