माणिक में डेटाइम का समय भाग निर्धारित करें


104

कहो मेरे पास एक डेटाइम ऑब्जेक्ट है उदा DateTime.now। मैं 0 (मध्यरात्रि) तक घंटे और मिनट सेट करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

जवाबों:


220

रेल वातावरण के भीतर:

ActiveSupport के लिए धन्यवाद आप उपयोग कर सकते हैं:

DateTime.now.midnight
DateTime.now.beginning_of_day

या

DateTime.now.change({ hour: 0, min: 0, sec: 0 })

# More concisely
DateTime.now.change({ hour: 0 })                

विशुद्ध रूप से रूबी पर्यावरण के भीतर:

now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)

या

now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))

26
FWIW, परिवर्तन विधि रेल का हिस्सा है जो रूबी नहीं है। समय के विकल्प (घंटे, मिनट, सेकंड) कैस्केडिंग को रीसेट करते हैं, इसलिए यदि केवल घंटे बीत चुके हैं, तो मिनट और सेकंड को 0. पर सेट किया जाता है, यदि घंटे और मिनट पारित किया जाता है, तो सेकंड 0.
अन्ना

1
ध्यान रखें कि DateTime.now.midnight 24:00:00 पर वापस नहीं आती है जैसा कि आप उम्मीद कर सकते हैं, यह 00:00:00 - start_of_day के समान मान देता है। मेरा उत्तर इस रूप में देखें कि यह कुछ परिदृश्यों में महत्वपूर्ण क्यों हो सकता है।
rmcsharry

1
आपका पहला विशुद्ध रूप से रूबी समाधान टाइमज़ोन जानकारी को छोड़ देता है, आपका दूसरा नहीं
टोनी

1
मैंने समय-सीमा को ध्यान में रखते हुए उत्तर को अपडेट किया है और दूसरी भिन्नता को प्रतिस्थापित किया है। @ बहुत अच्छी पकड़ है, वे वास्तव में एक निकट नज़र में समयक्षेत्र जानकारी के नुकसान के लिए अतिसंवेदनशील थे। DateTime.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
ashoda

TIMEZONE: तर्क हैश में कीवर्ड ऑफ़सेट द्वारा बदला जा सकता है: DateTime.now.change ({घंटा: 0, मिनट: 0, सेकंड: 0 ऑफसेट: '+02: 00'})
एकेंस्टीन डिकेंस

34

कोई बात नहीं, मिल गया। एक नई DateTime बनाने की आवश्यकता है:

DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)

6
अच्छा उत्तर। बस यह जोड़ना चाहते थे कि उन शून्य उस क्रम में चार, मिनट, सेकंड और OFFSET (टाइमज़ोन) का प्रतिनिधित्व करते हैं।
d_ethier

3
इस काम में असफल होने के बाद, मैंने सीखा कि इसके साथ: DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)यह काम करता है।
एकस्टीन डेका 31'14

2
मत भूलना: now = DateTime.now
हाबिल

1
यह भी ध्यान दें कि अंतिम तर्क के लिए टाइमस्टोन की एक स्ट्रिंग की आवश्यकता है जैसे ("- 0700") एमएसटी के लिए, पूर्णांक नहीं
डोनवन व्हाइट

2
जब तक आप ऐतिहासिक तिथियों के साथ काम नहीं कर रहे हैं, तब तक उपयोग न करें DateTime। यदि आप एक ऐसे देश में रहते हैं, जहां आपको ब्रिटेन की तरह दिन के समय की बचत होती है, तो आपको कष्टप्रद मुद्दे मिलेंगे। एक स्पष्टीकरण यहाँ देखें। gist.github.com/pixeltrix/e2298822dd89d854444b
fatuhoku

5

चेतावनी : DateTime.now.midnightऔर DateTime.now.beginning_of_dayउसी मान को लौटाएं (जो वर्तमान दिन का शून्य काल है - मध्यरात्रि 24:00:00 तक नहीं लौटता जैसा कि आप इसके नाम से उम्मीद करेंगे)।

इसलिए मैं इसे आगे की जानकारी के रूप में किसी के लिए भी जोड़ रहा हूं जो भविष्य में आधी रात के x दिन की गणना के लिए स्वीकृत उत्तर का उपयोग कर सकता है।

उदाहरण के लिए, एक 14 दिवसीय नि: शुल्क परीक्षण जो 14 वें दिन आधी रात को समाप्त होना चाहिए:

DateTime.now.midnight + 14.days

14 वें दिन की सुबह है, जो 13.x दिन के परीक्षण के बराबर है (x दिन के शेष भाग का हिस्सा है - यदि अब दोपहर है, तो यह 13.5 दिन का परीक्षण है)।

आपको वास्तव में ऐसा करने की आवश्यकता होगी:

DateTime.now.midnight + 15.days

14 वें दिन आधी रात को पाने के लिए।

इस कारण से मैं हमेशा उपयोग करना पसंद करता हूं beginning_of_day, क्योंकि यह 00:00:00 है। आधी रात का उपयोग करना भ्रामक / गलत समझा जा सकता है।


1

यदि आप इसका उपयोग करते हैं तो अक्सर डेट पार्स को बेहतर बनाने के लिए इस रत्न को स्थापित करने पर विचार करें:

https://github.com/mojombo/chronic

require 'chronic'

Chronic.parse('this 0:00')

मुझे यकीन नहीं है कि यह उत्तर सही क्यों है। यह वास्तव में इस सवाल का जवाब नहीं है। मुझे पता है कि एक तार को डेट पर कैसे भेजना है। लेकिन मैं यह जानना चाहूंगा कि किसी दिए गए दिनांक उदाहरण के किसी विशेष भाग को कैसे बदलना है। उदाहरण के लिए वर्ष। कोई विचार? जावा में मैं सिर्फ साल के लिए सेटर का उपयोग करूंगा। लेकिन यह रूबी में काम नहीं करता है :-(
रॉबर्ट रीज़

1
मुझे जीर्ण मणि पर अब भरोसा नहीं है। यह वास्तव में पुराना है। मुझे अपने ऐप में रन-टाइम पर तारीख-समय पार्स करने में समस्या थी, जिसके परिणामस्वरूप व्यवसाय का नुकसान हुआ।
विजय मीणा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.