রুবিতে ডেটটাইমের অংশ অংশ নির্ধারণ করুন


106

বলুন আমার একটি ডেটটাইম অবজেক্ট যেমন DateTime.now। আমি ঘন্টা (মিনিট) থেকে ঘন্টা এবং মিনিট সেট করতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


225

একটি রেল পরিবেশের মধ্যে:

অ্যাক্টিভ সাপোর্টকে ধন্যবাদ আপনি ব্যবহার করতে পারেন:

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
এফডাব্লুআইডাব্লু, পরিবর্তনের পদ্ধতিটি রুবি নয় রেলের অংশ। সময় বিকল্পগুলি (ঘন্টা, মিনিট, সেকেন্ড) cascadingly পুনরায় সেট করুন, 0. তাই যদি শুধু ঘন্টা পাস করা হয়েছে, তারপর মিনিট এবং সেকেন্ড 0. সেট করা হয় ঘন্টা এবং মিনিট পাস করা হয়েছে, তাহলে সেকেন্ড সেট করা হয়
আন্না

4
সচেতন থাকুন যে ডেটটাইম.নো.মিডনাইট 24:00:00 আপনার প্রত্যাশা মতো ফিরবে না, এটি 00:00:00 ফেরত দেয় - শুরুর_আর_দিনের সমান মান। কেন কিছু পরিস্থিতিতে এটি গুরুত্বপূর্ণ হতে পারে তা সম্পর্কে আমার উত্তর দেখুন।
rmchaharry

4
আপনার প্রথম নিখুঁতভাবে রুবি সমাধান টাইমজোন সম্পর্কিত তথ্য ড্রপ করে, আপনার দ্বিতীয়টি করে না
টনি

4
আমি টাইমজোনটিকে অ্যাকাউন্টে নিতে উত্তর আপডেট করেছি এবং দ্বিতীয় প্রকরণটি প্রতিস্থাপন করেছি। @ খুব ভাল ক্যাচ, তারা আসলেই কাছাকাছি নজরে টাইমজোন তথ্য হারাতে উভয়ই সংবেদনশীল ছিল। DateTime.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
আশোদা

টাইমজোন: আর্গুমেন্ট হ্যাশে অফসেট কীওয়ার্ড দ্বারা পরিবর্তন করা যেতে পারে: ডেটটাইম.নো.কেনজ ({ঘন্টা: 0, মিনিট: 0, সেকেন্ড: 0 অফসেট: '+02: 00'})
এক্কস্টেইন

34

কিছু নয়, পেয়েছি। একটি নতুন ডেটটাইম তৈরি করা দরকার:

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

6
ভাল উত্তর. কেবল যুক্ত করতে চেয়েছিলেন যে সেই শূন্যগুলি এই ক্রমে HOUR, MINUTE, SECOND এবং OFFSET (টাইমজোন) উপস্থাপন করে।
ডি_ইথিয়ার

4
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)এটির কাজ পেতে ব্যর্থ হওয়ার পরে, আমি এটি শিখেছি: এটি কাজ করে।
এক্কস্টেইন

4
ভুলে যাবেন না: now = DateTime.now
আবেল

4
এছাড়াও লক্ষ করুন যে শেষ যুক্তিটি এমএসটি-র জন্য টাইমজোন যেমন ("- 0700") হওয়া উচিত, কোনও পূর্ণসংখ্যা নয়
দোনভান হোয়াইট

4
আপনি যদি historicalতিহাসিক তারিখগুলি নিয়ে কাজ না করেন তবে ব্যবহার করবেন না DateTime। আপনি যদি এমন একটি দেশে বাস করেন যে যুক্তরাজ্যের মতো দিবালোকের সময় সাশ্রয় করে তবে আপনি বিরক্তিকর সমস্যাগুলি পেয়ে যাবেন। এখানে একটি ব্যাখ্যা দেখুন। gist.github.com/pixeltrix/e2298822dd89d854444b
ফতুহোকু

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')

এই উত্তরটি কেন সঠিক হিসাবে চিহ্নিত হয়েছে তা আমি নিশ্চিত নই। এটি আসলে প্রশ্নের উত্তর দেয় না। আমি জানি যে কীভাবে তারিখের স্ট্রিংকে পার্স করা যায়। তবে আমি কীভাবে একটি নির্দিষ্ট তারিখের উদাহরণের একটি নির্দিষ্ট অংশ পরিবর্তন করতে চাই তা জানতে চাই। যেমন বছর। কোন ধারনা? জাভাতে আমি কেবল বছরের জন্য সেটারটি ব্যবহার করব। তবে এটি রুবিতে কাজ করে না :-(
রবার্ট রেইজ

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