ইউটিসি টাইমস্ট্যাম্পকে রুবিতে আইএসও 8601 এ রূপান্তর করা


86

আমার একটি টাইমস্ট্যাম্প রয়েছে যা ইউটিসিতে রয়েছে

"2010-10-25 23:48:46 ইউটিসি"

আমার এটি আইএসও 8601 এ রূপান্তর করতে হবে

"2010-10-29 06: 09Z"

নথিটি নরক হিসাবে বিভ্রান্তিকর - এটি করার সহজতম উপায় কী?

উত্তর:


187

আমি মনে করি আপনি আমাদের প্রতারিত করার চেষ্টা করছেন।

আপনার প্রশ্নের ইনপুট তারিখটি ২৫ শে অক্টোবর, ২০১০ , আউটপুট ২৯ শে অক্টোবর, ২০১০ । ভালো খেলেছ!

এই নিট-বাছাইয়ের থ্রেড অব্যাহত রেখেছেন: আপনার সময়গুলিও সম্পূর্ণ আলাদা এবং আপনি আউটপুট সময় থেকে কয়েক সেকেন্ড মিস করছেন।

এখন সত্য উত্তরের জন্য।

প্রথমে কিছুটা সত্যই: রুবিতে আইএসও 8601 আউটপুট আইএসও 8601 এর উইকিপিডিয়া পৃষ্ঠা থেকে "সংযুক্ত তারিখ এবং সময়" আউটপুট অনুরূপ ।

আপনার কাছে একটি স্ট্রিং রয়েছে এবং তাই আপনাকে এটিকে কোনও Timeঅবজেক্টে রূপান্তর করতে হবে যা আপনি এটি করতে পারেন to_time। তারপরে iso8601আইএসও 8601 সংস্করণটি পাওয়ার জন্য কেবল object অবজেক্টটিতে কল করার বিষয়টি :

"2010-10-25 23:48:46 UTC".to_time.iso8601

to_timeথাকাকালীন পদ্ধতি, পাগল সৌজন্যে হয় iso8601রুবি এর স্ট্যান্ডার্ড গ্রন্থাগার সৌজন্যে হয়।


7
ভাল উত্তর, কিন্তু আমি প্রথম অংশটি পাইনি (এটি কি হাস্যকর হওয়ার কথা ছিল?)
মার্ক থমাস

4
ধিক! আপনারা লোকদের ঠকানোর জন্য আমার চক্রান্তের মাধ্যমে দেখেছিলেন। = পি দুর্দান্ত উত্তরের জন্য ধন্যবাদ, আমি অবাক হয়েছি কেন তারা ডকুমেন্টেশনে কেবল এটি লেখেন না!
মিশ্রিত করুন

13
@ মার্ক থমাস: হ্যাঁ এটি রসবোধ করার কথা ছিল। তিনি একটি ইনপুট এবং একটি আউটপুট সময় দিয়েছেন যা কখনও মিলবে না। ট্র্যাজি ছোট্ট হোবিট!
রায়ান বিগ

এটি কাজ করে, তবে যদিও তাঁর প্রশ্নটি রুবিতে এটি কীভাবে করবেন তা জিজ্ঞাসা করা হলেও এটি রেলের পরিবেশে অনুমান করে না।
আদালতসমাজ

4
সম্পর্কিত, "টু টাইম" me টাইম.নো.আইসো 8601 ফর্ম্যাটে "2010-10-25T23: 48: 46Z" এর মতো ফর্ম্যাটগুলিতে আমাকে ইশারা করার জন্য ধন্যবাদ, যদি আপনি 'জেড' এর পরিবর্তে '+00: 00' ব্যবহার করতে চান (যা আমার ছিল লিগ্যাসি সিস্টেমের জন্য) সময়.নো. টু.টাইম.আইসো 8601 এটি করতে দেখা যায়।
lucygenik

21

অনেক পরীক্ষা-নিরীক্ষার পরেও আমি টাইম লাইব্রেরির পার্সারটিকে ডেটটাইমের চেয়ে ভাল বলে মনে করি, যদিও কারণগুলি এই মুহূর্তে আমাকে এড়িয়ে চলে। সেই সতর্কতার সাথে আমি এই ধরণের স্টাফের জন্য ডেটটাইমের পরিবর্তে সর্বদা সময় ব্যবহার করি এবং রুবি ডকুমেন্টেশন কেন এটি কেন তা জানাতে অসুবিধা হয়,

require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"

4
ভাল খাঁটি রুবি সমাধান। কেবল যুক্ত করতে চাই, যদি আসল সময়টি ইউটিসি না হয় তবে আপনি Time.parse("...").utc.iso8601এটিটি দেখতে চাইতে পারেন: অন্যভাবে আপনি সময়টির সাথে প্রত্যয়যুক্ত সময় পাবেন +03:00বা সময়সীমার আসল সময়ের স্ট্রিংয়ের উপর নির্ভর করে কিছু অন্যান্য মান পাবেন। আমি এর পরিবর্তে বলতে চাই Z
akostadinov

4

দ্রষ্টব্য: আপনি টো-টাইম পদ্ধতি প্রয়োগ করার আগে আপনাকে একটি টাইম স্ট্রিংকে একটি টাইম অবজেক্টে রূপান্তর করতে হবে (পার্স করা)।

ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
    from (irb):16

সঠিক পদ্ধতি:

irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")

irb> ut.iso8601
 => "2010-10-25T23:48:46+00:00" 

1

এই অতি পুরানো প্রশ্নের উত্তর যুক্ত করা হচ্ছে কারণ আপনি যদি রেলগুলি ব্যবহার করেন তবে এখানকার অন্যান্য উত্তরগুলি আপনাকে যা করতে বলছে সেভাবে রূপান্তর / পার্স করার দরকার নেই:

  • যদি এটি ইতিমধ্যে একটি টাইমস্ট্যাম্প (যেমন, একটি created_atবা updated_atগুণ), আপনি সরাসরিiso8601 সেই টাইমস্ট্যাম্পটিতে পদ্ধতিটি কল করতে পারেন (যেমন,object.created_at.iso8601 )।
  • iso8601পদ্ধতি এছাড়াও ভগ্নাংশ সংখ্যার প্রদর্শন করতে একটি সাংখ্যিক যুক্তি গ্রহণ করে; আপনি যদি 2020-04-06T19:16:55.604Zপরিবর্তে চান তবে আপনি এটি ব্যবহার করবেন 2020-04-06T19:16:55Z

https://api.rubyonrails.org/v5.2.4/class/ActtiveSupport/TimeWithZone.html#method-i-iso8601

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.