আমার যদি থাকে তবে আমি d = DateTime.nowকীভাবে 'ডি' কে ইউটিসি-তে রূপান্তর করব (উপযুক্ত তারিখ সহ)?
উত্তর:
d = DateTime.now.utc
উফফফফ!
এটি রেলগুলিতে কাজ করছে বলে মনে হচ্ছে তবে ভ্যানিলা রুবি নয় (এবং অবশ্যই এটিই প্রশ্নটি জিজ্ঞাসা করছে)
d = Time.now.utc
তবে কাজ করে।
আপনার ব্যবহার করার দরকার নেই DateTimeএবং নেই Time? Timeআপনার যা প্রয়োজন তা অন্তর্ভুক্ত করা উচিত:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
DateTime.now.new_offset(0)
স্ট্যান্ডার্ড রুবিতে কাজ করবে (যেমন অ্যাক্টিভসপোর্ট ব্যতীত)।
new_offsetপদ্ধতি যুক্তি 0ইতিমধ্যে ডিফল্ট । সুতরাং DateTime.now.new_offsetপাশাপাশি ব্যবহার করা যেতে পারে।
দুর্ভাগ্যক্রমে, ডেটটাইম ক্লাসে এটি করার জন্য টাইম ক্লাসে সুবিধাজনক পদ্ধতিগুলি নেই। আপনি যেকোন ডেটটাইম অবজেক্টকে ইউটিসিতে রূপান্তর করতে পারেন:
d = DateTime.now
d.new_offset(Rational(0, 24))
আপনি ইউটিসি থেকে স্থানীয় সময়টিতে ফিরে যেতে ব্যবহার করতে পারেন:
d.new_offset(DateTime.now.offset)
যেখানে dইউটিসি সময় একটি তারিখসময় অবজেক্ট। যদি আপনি এগুলি সুবিধাগুলির পদ্ধতি হিসাবে পছন্দ করেন তবে আপনি সেগুলি এ জাতীয়ভাবে তৈরি করতে পারেন:
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
আপনি নিম্নলিখিত আইআরবি সেশনে এটি ক্রিয়াতে দেখতে পাবেন:
d = DateTime.now.new_offset(Rational(-4, 24))
=> #<DateTime: 106105391484260677/43200000000,-1/6,2299161>
1.8.7 :185 > d.to_s
=> "2012-08-03T15:42:48-04:00"
1.8.7 :186 > d.localtime.to_s
=> "2012-08-03T12:42:48-07:00"
1.8.7 :187 > d.utc.to_s
=> "2012-08-03T19:42:48+00:00"
আপনি উপরে দেখতে পারেন, প্রাথমিক ডেটটাইম অবজেক্টটিতে একটি -04: 00 অফসেট (পূর্ব সময়) রয়েছে। আমি প্যাসিফিক সময়ে আছি -07: 00 অফসেট সহ। localtimeপূর্বে বর্ণিত হিসাবে কল করা ডেটটাইম অবজেক্টকে স্থানীয় সময় রূপান্তর করে। utcঅবজেক্টে কল করা সঠিকভাবে এটি একটি ইউটিসি অফসেটে রূপান্তরিত করে।
আপনি যদি চান Time.nowএবং DateTime.nowআপনি ইউটিসি সময়ে প্রতিক্রিয়া চান তবে আপনি একটি এনএনভি সেট করতে পারেন ।
require 'date'
Time.now #=> 2015-11-30 11:37:14 -0800
DateTime.now.to_s #=> "2015-11-30T11:37:25-08:00"
ENV['TZ'] = 'UTC'
Time.now #=> 2015-11-30 19:37:38 +0000
DateTime.now.to_s #=> "2015-11-30T19:37:36+00:00"
আইআরবি ইন:
>>d = DateTime.now
=> #<DateTime: 11783702280454271/4800000000,5/12,2299161>
>> "#{d.hour.to_i - d.zone.to_i}:#{d.min}:#{d.sec}"
=> "11:16:41"
সময়টিকে ইউটিসি তে রূপান্তরিত করবে। পোস্ট হিসাবে যদি এটি সময় হয় তবে আপনি এটি ব্যবহার করতে পারেন:
Time.now.utc
এবং সরাসরি এটি পেতে।