Time रूबी में एक क्लास है जो आपको समय में एक विशिष्ट बिंदु को दर्शाने में मदद करती है।
इस लेख को पढ़ने के बाद आप रूबी टाइम विज़ार्ड बनने के लिए आवश्यक सब कुछ सीखेंगे!
कवर किए गए विषय:
- स्ट्रिंग्स को टाइम ऑब्जेक्ट्स में कैसे बदलें
- टाइम को कंपोनेंट्स (दिन/घंटे/मिलीसेकंड…) में कैसे तोड़ें
- रूबी में
Date,DateTimeऔरTimeक्लासेस का उपयोग कैसे करें - टाइम को किसी भी तरह से फॉर्मेट कैसे करें जो आप चाहते हैं
- दो
Timeऑब्जेक्ट्स के बीच अंतर कैसे खोजें
चलिए करते हैं!
रूबी Time क्लास
आप रूबी में समय और तारीख को दर्शाने के लिए Time क्लास का उपयोग कर सकते हैं।
इस तारीख के तीन घटक हैं:
- दिन
- महीना
- वर्ष
और समय:
- घंटे
- मिनट
- सेकंड
यह जानकारी Time क्लास द्वारा Epoch के बाद सेकंड की संख्या के रूप में संग्रहीत की जाती है, जिसे यूनिक्स समय के रूप में भी जाना जाता है।
एक Time ऑब्जेक्ट को इनिशियलाइज़ करने के कुछ तरीके हैं:
- आप
Time.nowका उपयोग करके वर्तमान समय को दर्शाने वाला ऑब्जेक्ट प्राप्त कर सकते हैं - आप
atमेथड और एक यूनिक्स टाइमस्टैम्प का उपयोग करके एकTimeऑब्जेक्ट बना सकते हैं - आप
Time.newको संख्या में प्रारंभिक तारीख दे सकते हैं (प्रारूप: वर्ष/महीना/दिन)
इस तरह:
Time.now # 2018-10-19 15:43:20 +0200 Time.new(2018, 1, 1) # 2018-01-01 00:00:00 +0100 Time.at(15000000000) # 2017-07-14 04:40:00 +0200
आप किसी टाइम ऑब्जेक्ट से उसके किसी भी घटक के लिए पूछ सकते हैं।
उदाहरण के लिए…
आप पूछ सकते हैं कि कोई टाइम ऑब्जेक्ट किस दिन, महीने या घंटे को दर्शा रहा है:
t = Time.now puts t.day puts t.month puts t.hour
इसके अलावा, आप यह भी पूछ सकते हैं कि क्या यह तारीख सप्ताह के किसी निश्चित दिन से मेल खाती है।
उदाहरण के लिए:
“क्या यह तारीख रविवार है?”।
ये प्रेडिकेट मेथड्स हैं, वे या तो true या false लौटाएंगे।
उदाहरण:
t = Time.now puts t.monday? puts t.sunday? puts t.friday?
इसे आज़माएं!
टाइम ज़ोन्स
एक Time ऑब्जेक्ट के साथ एक टाइम ज़ोन जुड़ा होता है।
आप zone मेथड का उपयोग करके Time ऑब्जेक्ट के लिए वर्तमान टाइम ज़ोन की जांच कर सकते हैं।
यह आपको टाइम ज़ोन संक्षिप्त नाम देगा।
यदि आप टाइम ज़ोन ऑफसेट चाहते हैं तो आप utc_offset मेथड का उपयोग कर सकते हैं। इस मेथड का आउटपुट सेकंड में होता है, लेकिन आप इसे 3600 से विभाजित करके घंटों में प्राप्त कर सकते हैं।
उदाहरण:
t = Time.now t.zone # "CET" t.utc_offset / 3600 # 1
आप UTC में वर्तमान समय भी प्राप्त कर सकते हैं:
Time.now.utc
रूबी टाइम फॉर्मेटिंग
रूबी डिफ़ॉल्ट रूप से Time ऑब्जेक्ट्स को एक विशिष्ट तरीके से फॉर्मेट करता है।
लेकिन आप कुछ और चाह सकते हैं।
कुछ ऐसा जो आपके उपयोग के मामले के अनुकूल हो।
अच्छी खबर!
आप एक मेथड का उपयोग करके लगभग कोई भी प्रारूप प्राप्त कर सकते हैं जिसकी आपको आवश्यकता है।
यह मेथड strftime है, जिसका मूल अर्थ है 'फॉर्मेट टाइम'।
यह फॉर्मेट स्पेसिफायर्स के साथ एक स्ट्रिंग पास करके काम करता है, ये स्पेसिफायर्स एक मान द्वारा प्रतिस्थापित किए जाएंगे। यदि आपने कभी printf मेथड का उपयोग किया है तो विचार उससे बहुत मिलता-जुलता है।
कुछ उदाहरण देखते हैं:
time = Time.new
time.strftime("%d/%m/%Y") # "05/12/2015"
time.strftime("%k:%M") # "17:48"
time.strftime("%I:%M %p") # "11:04 PM"
time.strftime("Today is %A") # "Today is Sunday"
time.strftime("%d of %B, %Y") # "21 of December, 2015"
time.strftime("Unix time is %s") # "Unix time is 1449336630"
जैसा कि आप देख सकते हैं, यह मेथड बहुत लचीला है। आप तारीख के बिना समय प्राप्त कर सकते हैं, या वर्ष, दिन और वर्तमान महीने के नाम के साथ एक अच्छी तरह से फॉर्मेट की गई तारीख।
Strftime फॉर्मेट टेबल
| फॉर्मेट | विवरण |
|---|---|
| %d | महीने का दिन (01..31) |
| %m | वर्ष का महीना (01..12) (1..12) के लिए %-m उपयोग करें |
| %k | घंटा (0..23) |
| %M | मिनट |
| %S | सेकंड (00..60) |
| %I | घंटा (1..12) |
| %p | AM/PM |
| %Y | वर्ष |
| %A | सप्ताह का दिन (नाम) |
| %B | महीना (नाम) |
आप विभिन्न फॉर्मेट्स पर अधिक जानकारी निम्न लिंक्स पर पा सकते हैं:
- https://strftime.net/
- https://devdocs.io/ruby/time#method-i-strftime
टाइमस्टैम्प जनरेट करना
आप विशिष्ट घटनाओं को दिनांकित करने के लिए टाइम-ज़ोन इंडिपेंडेंट टाइमस्टैम्प जनरेट कर सकते हैं।
यहाँ कैसे:
Time.now.to_i # 1549054305
यह टाइमस्टैम्प UTC (कोऑर्डिनेटेड यूनिवर्सल टाइम) में सेकंड की संख्या है।
टाइम डिफरेंस (जोड़ और घटाव)
कभी-कभी आप वर्तमान समय नहीं चाहते, बल्कि भविष्य या अतीत में समय चाहते हैं।
आप टाइम ऑब्जेक्ट्स के साथ जोड़ कर सकते हैं!
याद रखें कि Time के लिए आंतरिक प्रतिनिधित्व सेकंड में है, इसलिए आप यह कर सकते हैं:
# दस सेकंड जोड़ें time = Time.new + 10
इस उदाहरण में आपको एक टाइम ऑब्जेक्ट मिलता है जो वर्तमान समय से 10 सेकंड आगे सेट है।
फिर आप जांच सकते हैं कि वह समय बीत चुका है या नहीं।
Time.new > time
यदि आप कल का दिन जैसा कुछ प्राप्त करना चाहते हैं तो आपको यह गणना करनी होगी कि एक दिन में कितने सेकंड होते हैं।
इस तरह:
# सेकंड * मिनट * घंटे 60 * 60 * 24 # 86400
अब इस संख्या के साथ हम इसे वर्तमान तारीख से घटा सकते हैं:
Time.now - 86400
यदि आप रेल्स का उपयोग कर रहे हैं तो आप यह कर सकते हैं:
Time.now - 1.day
Date क्लास
Date क्लास में मिनट, सेकंड या घंटे की कोई अवधारणा नहीं है। यह क्लास सब कुछ आंतरिक रूप से दिनों के संदर्भ में संग्रहीत करती है।
Date क्लास का उपयोग करने के लिए आपको require 'date' करना होगा।
आप Date.today का उपयोग करके वर्तमान तारीख प्राप्त कर सकते हैं।
Time के विपरीत, Date.new today का उपनाम नहीं है, इसलिए इसे ध्यान में रखें।
Date.today # वर्तमान तारीख Date.new # एक नकारात्मक तारीख लौटाता है
Date अंकगणित Time क्लास के समान है, अंतर यह है कि आप सेकंड के बजाय दिन जोड़ते हैं।
Date.today + 1 # एक दिन जोड़ता है
एक Date घंटे, सेकंड या मिनट के बारे में कुछ नहीं जानता, इसलिए केवल इस क्लास का उपयोग करें यदि आपको इनकी आवश्यकता नहीं है।
Date & Time पार्सिंग
Date.parse मेथड किसी भी स्ट्रिंग को पार्स करने का प्रयास करेगा जो तारीख जैसी दिखती है।
यह एक सरल ह्यूरिस्टिक एल्गोरिदम का उपयोग करता है जो इनपुट फॉर्मेट का पता लगाने की कोशिश करता है।
कभी-कभी यह अवांछित परिणाम देगा।
उदाहरण:
Date.parse("10/10/2010") # -> 2010-10-10
Date.parse("September 3") # -> 2015-09-03
Date.parse("May I have a cup of coffee, please?") # -> 1 of May
यदि आपको कुछ अधिक सख्त चाहिए तो आप Date.iso8601 मेथड का उपयोग कर सकते हैं।
एक iso8601 तारीख का निम्नलिखित प्रारूप होता है:
year-month-day
अमान्य इनपुट पर ArgumentError अपवाद उठाया जाएगा।
उदाहरण:
Date.iso8601("2018-10-01")
आप Date.strptime मेथड और फॉर्मेट स्पेसिफायर्स के एक सेट का उपयोग करके अपना खुद का कस्टम इनपुट फॉर्मेट प्रदान कर सकते हैं। ये वही स्पेसिफायर्स हैं जिनका उपयोग आप strftime के लिए कर सकते हैं।
उदाहरण:
Date.strptime("3 of September", "%d of %B") # 2015-09-03
आप Time क्लास का उपयोग करके समय पार्स कर सकते हैं।
दूसरे शब्दों में:
'2018-01-01 00:00' जैसी स्ट्रिंग को Time ऑब्जेक्ट में कैसे बदलें!
यहाँ एक उदाहरण है:
require 'time'
Time.parse("September 20 18:00")
यदि आप अपने इनपुट स्ट्रिंग का प्रारूप प्रदान करना चाहते हैं तो आप strptime मेथड का उपयोग कर सकते हैं।
इस तरह:
require 'time'
Time.strptime("1 of December 2017", "%d of %B %Y")
Time.parse और Date.parse के बीच एकमात्र अंतर वह ऑब्जेक्ट है जो आपको वापस मिलता है (Time या Date)।
Date कॉन्स्टेंट्स
Date क्लास में कुछ कॉन्स्टेंट्स हैं जो आपको उपयोगी लग सकते हैं।
उदाहरण के लिए, वर्ष के महीनों के साथ एक सरणी और सप्ताह के दिनों के साथ एक और।
महीने इंडेक्स 1 से शुरू होते हैं ताकि आप एक सीधा महीना नंबर -> महीना नाम मैपिंग प्राप्त कर सकें।
दिन रविवार से शुरू होते हैं, लेकिन आप सप्ताह को सोमवार से शुरू करने के लिए rotate मेथड का उपयोग कर सकते हैं।
Date::MONTHNAMES # (इंडेक्स 0 = nil) Date::DAYNAMES.rotate(1)
DateTime क्लास
DateTime क्लास Date का एक उपवर्ग है और यह तारीखों के अलावा सेकंड स्टोर कर सकती है।
उदाहरण:
require 'date' DateTime.superclass # Date DateTime.now # DateTime: 2018-10-15T16:06:39+02:00
दोनों Time और DateTime वही काम कर सकते हैं, मुख्य अंतर यह है कि Time C में लागू है, इसलिए यह तेज़ होगा।
प्रदर्शन:
Comparison: Time: 2644596.6 i/s DateTime: 231634.8 i/s - 11.42x slower
ActiveSupport – Time & Date मेथड्स
यदि आपने रेल्स का उपयोग किया है तो आप शायद 3.days.ago जैसी चीजों से परिचित हैं।
ये मेथड्स शुद्ध रूबी में उपलब्ध नहीं हैं, इन्हें रेल्स के ActiveSupport घटक द्वारा जोड़ा जाता है।
यहां आप कुछ उदाहरण पा सकते हैं, ध्यान दें कि ये मेथड्स Time या Date ऑब्जेक्ट्स नहीं लौटाते, बल्कि एक कस्टम ActiveSupport क्लास लौटाते हैं।
1.hour.to_i # 3600 1.day # ActiveSupport::Duration 3.days.ago # ActiveSupport::TimeWithZone
आप इनके साथ टाइम मैथ कर सकते हैं और कल की तारीख जैसी चीजें प्राप्त कर सकते हैं:
Time.now + 1.day
अन्य रेल्स-एक्सक्लूसिव टाइम मेथड्स:
date = Time.current date.change(hour: 20) date.at_beginning_of_day
और फॉर्मेटिंग के लिए:
date = Date.today date.to_formatted_s(:short) # "16 Jul" date.to_formatted_s(:long) # "July 16, 2018"
इन मेथड्स का कोड वास्तव में काफी सरल है, आपको एक नज़र डालनी चाहिए। TimeWithZone के लिए स्रोत कोड भी देखने लायक है।
सारांश
इस लेख में आपने Time और Date क्लासेस के बारे में सीखा, रूबी में टाइम को कैसे पार्स और फॉर्मेट करें, और ActiveSupport टाइम एक्सटेंशन का उपयोग कैसे करें।
पढ़ने के लिए धन्यवाद!