রুবিতে আমি কীভাবে ডেটটাইম.নিকে ইউটিসিতে রূপান্তর করব?


98

আমার যদি থাকে তবে আমি d = DateTime.nowকীভাবে 'ডি' কে ইউটিসি-তে রূপান্তর করব (উপযুক্ত তারিখ সহ)?

উত্তর:


156

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

কারণ আমি রূপান্তরটির সঠিক তারিখটি চাই, যেমন GMT +10 পরের দিন হতে পারে ...
অ্যাশ

4
সময় আপনার জন্য ঠিক ঠিক করবে। সময় কেবল দিনের সময় নয়, তারিখের অংশটিও অন্তর্ভুক্ত করে। একবার দেখার জন্য সময়.ন.ও.স্পেক্ট করুন।
ড্যানসিংগারম্যান

4
আহ মিষ্টি. তাহলে তারিখ, সময় এবং তারিখের সময় পার্থক্য কি?
অ্যাশ

18
সময়টি অভ্যন্তরীণভাবে সেকেন্ড এবং মাইক্রোসেকেন্ডগুলির সংখ্যার হিসাবে সংরক্ষণ করা হয়, 1 জানুয়ারী, 1970 সাল 00:00 ইউটিসি থেকে। তারিখটি, অভ্যন্তরীণভাবে, জ্যোতির্বিজ্ঞানী জুলিয়ান ডে নম্বর হিসাবে উপস্থাপিত হয় এবং ডেটটাইমটি কেবল সাধারণ উদ্ভট (কারণ সম্ভবত
এটিই রেলগুলি

169
DateTime.now.new_offset(0)

স্ট্যান্ডার্ড রুবিতে কাজ করবে (যেমন অ্যাক্টিভসপোর্ট ব্যতীত)।


4
এবং এটি আসলে প্রশ্নের সবচেয়ে সঠিক উত্তর correct
আর্নেস্ট

4
এটির আরও বেশি পরিমাণে উচিৎ হওয়া উচিত। ডেটটাইম সময়ের চেয়ে আলাদা। আমার ঠিক এটাই দরকার ছিল
d11wtq

4
new_offsetপদ্ধতি যুক্তি 0ইতিমধ্যে ডিফল্ট । সুতরাং DateTime.now.new_offsetপাশাপাশি ব্যবহার করা যেতে পারে।
ক্রিপটার

8

দুর্ভাগ্যক্রমে, ডেটটাইম ক্লাসে এটি করার জন্য টাইম ক্লাসে সুবিধাজনক পদ্ধতিগুলি নেই। আপনি যেকোন ডেটটাইম অবজেক্টকে ইউটিসিতে রূপান্তর করতে পারেন:

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অবজেক্টে কল করা সঠিকভাবে এটি একটি ইউটিসি অফসেটে রূপান্তরিত করে।


5

এটি চেষ্টা করুন, রুবিতে কাজ করে :

DateTime.now.to_time.utc

4

আপনি যদি চান 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"

2

আইআরবি ইন:

>>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

এবং সরাসরি এটি পেতে।


1

একটি ডেটটাইমের স্ট্রিং উপস্থাপনা সময় শ্রেণি দ্বারা পার্স করা যায়।

> Time.parse(DateTime.now.to_s).utc
=> 2015-10-06 14:53:51 UTC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.