रूबी में समय एक वर्ग है जो आपको समय में एक विशिष्ट बिंदु का प्रतिनिधित्व करने में मदद करता है।
इस लेख को पढ़ने के बाद आप रूबी टाइम विजार्ड बनने के लिए वह सब कुछ सीखेंगे जो आपको जानना आवश्यक है!
कवर किए गए विषय :
- स्ट्रिंग को टाइम ऑब्जेक्ट में कैसे बदलें
- किसी समय को घटकों में कैसे विभाजित करें (दिन/घंटे/मिलीसेकंड…)
Date
का उपयोग कैसे करें ,DateTime
&Time
रूबी में कक्षाएं- समय को अपनी इच्छानुसार कैसे प्रारूपित करें
- दो
Time
के बीच अंतर कैसे पता करें वस्तुएं
चलो यह करते हैं!
द रूबी टाइम क्लास
आप Time
का उपयोग कर सकते हैं रूबी में एक समय और तारीख का प्रतिनिधित्व करने के लिए कक्षा।
यह तारीख इसके तीन घटक हैं:
- दिन
- माह
- वर्ष
और समय :
- घंटे
- मिनट
- सेकंड
यह जानकारी Time
. द्वारा संग्रहित की जाती है युग के बाद से सेकंड की संख्या के रूप में वर्ग, जिसे यूनिक्स समय भी कहा जाता है।
आरंभ करने के कुछ तरीके हैं एक Time
वस्तु:
- आप एक ऐसी वस्तु प्राप्त कर सकते हैं जो
Time.now
. का उपयोग करके वर्तमान समय का प्रतिनिधित्व करती है - आप एक
Time
बना सकते हैं यूनिक्स टाइमस्टैम्प औरat
. का उपयोग करके ऑब्जेक्ट विधि - आप शुरू होने की तारीख को संख्याओं में
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
वस्तु के साथ एक समय क्षेत्र जुड़ा होता है।
आप Time
. के लिए वर्तमान समय क्षेत्र की जांच कर सकते हैं zone
. का उपयोग करके ऑब्जेक्ट विधि।
यह आपको समय क्षेत्र का संक्षिप्त रूप देगा।
यदि आप समय क्षेत्र ऑफ़सेट . चाहते हैं आप utc_offset
. का उपयोग कर सकते हैं तरीका। इस विधि का आउटपुट सेकंड में है, लेकिन आप इसे 3600 से विभाजित करके घंटों में प्राप्त कर सकते हैं।
उदाहरण :
t = Time.now t.zone # "CET" t.utc_offset / 3600 # 1
आप यूटीसी में वर्तमान समय भी प्राप्त कर सकते हैं:
Time.now.utc
रूबी टाइम फ़ॉर्मेटिंग
रूबी प्रारूप Time
डिफ़ॉल्ट रूप से एक विशिष्ट तरीके से वस्तुओं।
लेकिन आपको कुछ और चाहिए।
कुछ ऐसा जो आपके उपयोग के मामले के अनुकूल हो ।
अच्छी खबर!
आप एक विधि . का उपयोग कर सकते हैं लगभग आपको जो भी प्रारूप चाहिए get प्राप्त करने के लिए ।
यह तरीका है 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"
जैसा कि आप देख सकते हैं, यह विधि बहुत लचीली है। आप तारीख के बिना समय प्राप्त कर सकते हैं, या वर्तमान माह के वर्ष, दिन और नाम के साथ एक अच्छी तरह से स्वरूपित तिथि प्राप्त कर सकते हैं।
स्ट्रैफ़टाइम प्रारूप तालिका
Format | विवरण |
---|---|
%d | महीने का दिन (01..31) |
%m | साल का महीना (01..12) %-m का प्रयोग करें के लिए (1..12) |
%k | घंटा (..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
. के लिए आंतरिक प्रतिनिधित्व सेकंड में है, इसलिए आप यह कर सकते हैं:
# Add ten seconds time = Time.new + 10
इस उदाहरण में आपको एक टाइम ऑब्जेक्ट मिलता है जो वर्तमान समय से 10 सेकंड के लिए सेट होता है।
फिर आप जांच सकते हैं कि क्या वह समय अभी बीत चुका है।
Time.new > time
यदि आप कल के दिन जैसा कुछ पाना चाहते हैं तो आपको गणना करनी होगी कि एक दिन में कितने सेकंड होते हैं।
इसे पसंद करें :
# seconds * minutes * hours 60 * 60 * 24 # 86400
अब इस संख्या से हम इसे वर्तमान तिथि से घटा सकते हैं:
Time.now - 86400
यदि आप रेल का उपयोग कर रहे हैं तो आप यह कर सकते हैं:
Time.now - 1.day
दिनांक कक्षा
Date
कक्षा में मिनट, सेकंड या घंटों की कोई अवधारणा नहीं है। यह वर्ग दिनों के अनुसार आंतरिक रूप से सब कुछ संग्रहीत करता है।
Date
का उपयोग करने के लिए कक्षा आपको चाहिए require 'date'
।
आप Date.today
. का उपयोग करके वर्तमान तिथि प्राप्त कर सकते हैं ।
समय के विपरीत, Date.new
today
. का उपनाम नहीं है , तो इसे ध्यान में रखें।
Date.today # Current date Date.new # Returns a negative date
दिनांक अंकगणित Time
. के समान है वर्ग, अंतर यह है कि आप सेकंड के बजाय दिन जोड़ते हैं।
Date.today + 1 # Adds one day
एक Date
घंटों, सेकंड या मिनटों के बारे में कुछ भी नहीं जानता, इसलिए इस कक्षा का उपयोग केवल तभी करें जब आपको इनकी आवश्यकता न हो।
दिनांक और समय पार्सिंग
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' जैसी स्ट्रिंग को टाइम ऑब्जेक्ट में कैसे बदलें!
यहां एक उदाहरण दिया गया है :
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
कक्षा में कुछ स्थिरांक हैं जो आपको उपयोगी लग सकते हैं।
उदाहरण के लिए, वर्ष के महीनों और सप्ताह के दिनों के साथ एक सरणी है।
महीने इंडेक्स 1 से शुरू होते हैं ताकि आप सीधे month number -> month name
प्राप्त कर सकें मानचित्रण।
दिन रविवार से शुरू होते हैं, लेकिन आप rotate
. का उपयोग कर सकते हैं सप्ताह सोमवार को शुरू करने की विधि।
Date::MONTHNAMES # (index 0 = nil) Date::DAYNAMES.rotate(1)
डेटटाइम क्लास
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 - समय और दिनांक के तरीके
यदि आपने रेल का उपयोग किया है तो आप शायद 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 का सोर्स कोड भी देखने लायक है।
सारांश
इस लेख में आपने समय और दिनांक कक्षाओं के बारे में सीखा, रूबी में समय का विश्लेषण और प्रारूप कैसे करें, और ActiveSupport समय एक्सटेंशन का उपयोग कैसे करें।
पढ़ने के लिए धन्यवाद!