Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी टाइम एंड डेट क्लासेस का उपयोग कैसे करें

रूबी में समय एक वर्ग है जो आपको समय में एक विशिष्ट बिंदु का प्रतिनिधित्व करने में मदद करता है।

इस लेख को पढ़ने के बाद आप रूबी टाइम विजार्ड बनने के लिए वह सब कुछ सीखेंगे जो आपको जानना आवश्यक है!

कवर किए गए विषय :

  • स्ट्रिंग को टाइम ऑब्जेक्ट में कैसे बदलें
  • किसी समय को घटकों में कैसे विभाजित करें (दिन/घंटे/मिलीसेकंड…)
  • 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 समय एक्सटेंशन का उपयोग कैसे करें।

पढ़ने के लिए धन्यवाद!


  1. एक मैट्रिक्स क्या है और रूबी में इसका उपयोग कैसे करें?

    मैट्रिक्स एक 2डी (2-आयामी) सरणी है जिसका उपयोग स्प्रेडशीट जैसे डेटा को स्टोर और काम करने के लिए किया जा सकता है। उनका उपयोग इसके लिए किया जा सकता है : टेबल गेम (शतरंज, चेकर्स, आदि) में बोर्ड का प्रतिनिधित्व करना सांख्यिकी और डेटा विश्लेषण प्लॉट और ग्राफ़ बनाना चूंकि यह एक शक्तिशाली डेटा संरचना ह

  1. रूबी उपनाम कीवर्ड का उपयोग कैसे करें

    आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं: उपनाम (कीवर्ड) उपनाम_विधि क्योंकि वे एक ही काम को थोड़े अलग तरीके से करते हैं, यह एक भ्रमित करने वाला विषय हो सकता है। यह छवि मतभेदों का सारांश है : आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें! उपनाम कीवर्ड सबसे पहले

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ