সময় হল রুবিতে একটি শ্রেণী যা আপনাকে সময়ের একটি নির্দিষ্ট বিন্দু প্রতিনিধিত্ব করতে সাহায্য করে।
এই নিবন্ধটি পড়ার পরে আপনি রুবি টাইম উইজার্ড হওয়ার জন্য আপনার যা জানা দরকার তা শিখবেন!
কভার করা বিষয়গুলি৷ :
- কীভাবে স্ট্রিংকে টাইম অবজেক্টে রূপান্তর করা যায়
- কীভাবে একটি সময়কে উপাদানে ভাগ করা যায় (দিন/ঘন্টা/মিলিসেকেন্ড...)
- কিভাবে
Date
ব্যবহার করবেন ,DateTime
&Time
রুবি
তে ক্লাস - যে কোনো উপায়ে কিভাবে সময় ফরম্যাট করবেন
- কিভাবে দুটি
Time
এর মধ্যে পার্থক্য খুঁজে বের করবেন বস্তু
এটা করা যাক!
রুবি টাইম ক্লাস
আপনি Time
ব্যবহার করতে পারেন একটি সময় এবং তারিখ প্রতিনিধিত্ব করতে রুবিতে ক্লাস।
এই তারিখ তিনটি উপাদান আছে:
- দিন
- মাস
- বছর
এবং সময় :
- ঘন্টা
- মিনিট
- সেকেন্ড
এই তথ্য Time
দ্বারা সংরক্ষণ করা হয় যুগের পর থেকে সেকেন্ডের সংখ্যা হিসাবে শ্রেণি, যা ইউনিক্স সময় নামেও পরিচিত।
আরম্ভ করার কয়েকটি উপায় আছে৷ একটি Time
বস্তু:
- আপনি
Time.now
ব্যবহার করে একটি বস্তু পেতে পারেন যা বর্তমান সময়ের প্রতিনিধিত্ব করে - আপনি একটি
Time
তৈরি করতে পারেন অবজেক্ট একটি ইউনিক্স টাইমস্ট্যাম্প এবংat
ব্যবহার করে পদ্ধতি - আপনি
Time.new
নম্বরে শুরুর তারিখ দিতে পারেন (বিন্যাস:বছর/মাস/দিন)
এরকম :
সময় -14 04:40:00 +0200আপনি একটি টাইম অবজেক্টকে এর যেকোনো উপাদানের জন্য জিজ্ঞাসা করতে পারেন।
যেমন…
আপনি জিজ্ঞাসা করতে পারেন কোন দিন, মাস বা ঘন্টা কোন সময় বস্তুর প্রতিনিধিত্ব করছে:
t =Time.nowputs t.dayputs t.monthputs t.hour
এছাড়াও, আপনি জিজ্ঞাসা করতে পারেন যে এই তারিখটি সপ্তাহের একটি নির্দিষ্ট দিনের সাথে মিলে যায় কিনা৷
৷উদাহরণস্বরূপ :
"এই তারিখ কি রবিবার?".
এইগুলি পূর্বনির্ধারিত পদ্ধতি, তারা হয় true
ফেরত দেবে অথবা false
.
উদাহরণ :
t =Time.nowputs t.monday?puts t.sunday?puts t.friday?
একবার চেষ্টা করে দেখুন!
টাইম জোন
একটি Time
বস্তুর সাথে যুক্ত একটি সময় অঞ্চল আছে৷
আপনি একটি Time
এর জন্য বর্তমান সময় অঞ্চল পরীক্ষা করতে পারেন বস্তুটি zone
ব্যবহার করে পদ্ধতি।
এটি আপনাকে সময় অঞ্চলের সংক্ষিপ্ত রূপ দেবে৷
৷
আপনি যদি টাইম জোন অফসেট চান আপনি utc_offset
ব্যবহার করতে পারেন পদ্ধতি এই পদ্ধতির আউটপুট সেকেন্ডে, তবে আপনি এটিকে ঘন্টায় পেতে 3600 দ্বারা ভাগ করতে পারেন৷
উদাহরণ :
t =Time.nowt.zone# "CET"t.utc_offset / 3600# 1
এছাড়াও আপনি UTC এ বর্তমান সময় পেতে পারেন:
Time.now.utc
রুবি টাইম ফরম্যাটিং
রুবি ফরম্যাট Time
ডিফল্টরূপে একটি নির্দিষ্ট উপায়ে বস্তু।
কিন্তু আপনি অন্য কিছু চাইতে পারেন।
এমন কিছু যা আপনার ব্যবহারের ক্ষেত্রে খাপ খায় .
সুখবর!
আপনি একটি পদ্ধতি ব্যবহার করতে পারেন প্রায় আপনার প্রয়োজনীয় যেকোনো বিন্যাস পেতে .
এই পদ্ধতিটি হল strftime
, যার অর্থ মূলত 'ফরম্যাট সময়'।
এটি ফর্ম্যাট স্পেসিফায়ারের সাথে একটি স্ট্রিং পাস করে কাজ করে, এই স্পেসিফায়ারগুলি একটি মান দ্বারা প্রতিস্থাপিত হবে। আপনি যদি কখনও printf
ব্যবহার করে থাকেন পদ্ধতিটি ধারণাটির সাথে খুব মিল।
আসুন কিছু উদাহরণ দেখি :
time =Time.newtime.strftime("%d/%m/%Y") # "05/12/2015"time.strftime("%k:%M") # "17:48"সময়। strftime("%I:%M %p") # "11:04 PM"time.strftime("আজ %A") # "আজ রবিবার"time.strftime("%B এর %d, %Y" ) # "21 ডিসেম্বর, 2015"time.strftime("Unix time is %s") # "Unix time is 1449336630"
আপনি দেখতে পাচ্ছেন, এই পদ্ধতিটি খুব নমনীয়। আপনি তারিখ ছাড়াই সময় পেতে পারেন বা বর্তমান মাসের বছর, দিন এবং নাম সহ একটি সুন্দর ফর্ম্যাট করা তারিখ পেতে পারেন৷
Strftime ফরম্যাট টেবিল
ফর্ম্যাট | বর্ণনা |
---|---|
%d | মাসের দিন (01..31) |
%m | বছরের মাস (01..12) %-m ব্যবহার করুন (1..12) | এর জন্য
%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.new + 10
এই উদাহরণে আপনি একটি টাইম অবজেক্ট পাবেন যা বর্তমান সময় থেকে 10 সেকেন্ড সেট করা হয়েছে।
তারপরে আপনি পরীক্ষা করতে পারেন যে সেই সময়টি এখনও কেটে গেছে কিনা৷
Time.new> time
আপনি যদি গতকালের দিনের মতো কিছু পেতে চান তবে আপনাকে গণনা করতে হবে দিনে কত সেকেন্ড আছে।
এরকম :
# সেকেন্ড * মিনিট * ঘন্টা60 * 60 * 24# 86400
এখন এই সংখ্যাটি দিয়ে আমরা বর্তমান তারিখ থেকে এটিকে বাদ দিতে পারি:
Time.now - 86400
আপনি যদি রেল ব্যবহার করেন তবে আপনি এটি করতে পারেন:
Time.now - 1.day
তারিখ ক্লাস
Date
ক্লাসে মিনিট, সেকেন্ড বা ঘন্টার কোন ধারণা নেই। এই ক্লাসটি দিনের পরিপ্রেক্ষিতে অভ্যন্তরীণভাবে সবকিছু সঞ্চয় করে।
Date
ব্যবহার করতে ক্লাস আপনাকে require 'date'
করতে হবে .
আপনি Date.today
ব্যবহার করে বর্তমান তারিখ পেতে পারেন .
সময়ের বিপরীতে, Date.new
today
এর জন্য একটি উপনাম নয় , তাই মনে রাখবেন।
তারিখ.আজ # বর্তমান dateDate.new # একটি নেতিবাচক তারিখ প্রদান করে
তারিখ পাটিগণিত Time
এর অনুরূপ ক্লাস, পার্থক্য হল আপনি সেকেন্ডের পরিবর্তে দিন যোগ করুন।
তারিখ.আজ + 1 # একদিন যোগ করে
একটি Date
ঘন্টা, সেকেন্ড বা মিনিট সম্পর্কে কিছুই জানে না, তাই শুধুমাত্র এই ক্লাসটি ব্যবহার করুন যদি আপনার এগুলোর প্রয়োজন না হয়।
তারিখ ও সময় পার্সিং
Date.parse
পদ্ধতিটি তারিখের মতো দেখতে যেকোনো স্ট্রিং পার্স করার চেষ্টা করবে।
এটি একটি সাধারণ হিউরিস্টিক অ্যালগরিদম ব্যবহার করে যা ইনপুট ফর্ম্যাট সনাক্ত করার চেষ্টা করে৷
কখনও কখনও এটি অবাঞ্ছিত ফলাফল দেয়৷
উদাহরণ :
Date.parse("10/10/2010") # -> 2010-10-10Date.parse("সেপ্টেম্বর 3") # -> 2015-09-03Date.parse("আমি এক কাপ কফি খেতে পারি , দয়া করে?") # -> 1 মে
আপনার যদি আরও কঠোর কিছুর প্রয়োজন হয় তবে আপনি Date.iso8601
ব্যবহার করতে পারেন পদ্ধতি।
একটি iso8601
তারিখের নিম্নলিখিত বিন্যাস রয়েছে:
বছর-মাস-দিন
একটি ArgumentError
ব্যতিক্রম অবৈধ ইনপুট উত্থাপিত হবে.
উদাহরণ :
তারিখ.iso8601("2018-10-01")
আপনি Date.strptime
ব্যবহার করতে পারেন পদ্ধতি এবং আপনার নিজস্ব কাস্টম ইনপুট বিন্যাস প্রদান করার জন্য বিন্যাস নির্দিষ্টকরণের একটি সেট। এই একই স্পেসিফায়ার যা আপনি strftime
এর জন্য ব্যবহার করতে পারেন .
উদাহরণ :
তারিখ.strptime("সেপ্টেম্বর 3", "%B এর %d") # 2015-09-03
আপনি Time
ব্যবহার করে সময় বিশ্লেষণ করতে পারেন ক্লাস।
অন্য কথায় :
'2018-01-01 00:00'-এর মতো একটি স্ট্রিংকে কীভাবে টাইম অবজেক্টে রূপান্তর করা যায়!
এখানে একটি উদাহরণ আছে :
'time'Time.parse প্রয়োজন("সেপ্টেম্বর 20 18:00")
আপনি যদি আপনার ইনপুট স্ট্রিং এর বিন্যাস প্রদান করতে চান তাহলে আপনি strptime
ব্যবহার করতে পারেন পদ্ধতি।
এরকম :
'time'Time.strptime("ডিসেম্বর 2017 এর 1", "%B %Y এর %d") প্রয়োজন
শুধুমাত্র Time.parse
এর মধ্যে পার্থক্য &Date.parse
আপনি যে ধরনের বস্তু ফিরে পান (Time
অথবা Date
)।
তারিখ ধ্রুবক
Date
ক্লাসে কিছু ধ্রুবক আছে যা আপনার কাজে লাগতে পারে।
উদাহরণস্বরূপ, বছরের মাসগুলির সাথে একটি অ্যারে এবং সপ্তাহের দিনগুলির সাথে আরেকটি রয়েছে৷
৷
মাসগুলি সূচী 1 থেকে শুরু হয় যাতে আপনি সরাসরি month number -> month name
পেতে পারেন ম্যাপিং।
দিনগুলি রবিবার দিয়ে শুরু হয়, তবে আপনি rotate
ব্যবহার করতে পারেন সোমবার থেকে সপ্তাহ শুরু করার পদ্ধতি৷
তারিখ::MONTHNAMES # (সূচক 0 =শূন্য)তারিখ::DAYNAMES.rotate(1)
তারিখের সময় ক্লাস
DateTime
ক্লাস হল Date
এর একটি সাবক্লাস এবং এটি তারিখ ছাড়াও সেকেন্ড সংরক্ষণ করতে পারে।
উদাহরণ :
'date'DateTime.superclass# DateDateTime.now# তারিখের সময়:2018-10-15T16:06:39+02:00
উভয়ই Time
এবং DateTime
একই কাজ করা যায়, মূল পার্থক্য হল Time
C
এ প্রয়োগ করা হয় , তাই এটি দ্রুত হবে৷
পারফরম্যান্স :
তুলনা:সময়:2644596.6 i/s তারিখ সময়:231634.8 i/s - 11.42x ধীর
ActiveSupport – সময় ও তারিখ পদ্ধতি
আপনি যদি রেল ব্যবহার করে থাকেন তাহলে আপনি সম্ভবত 3.days.ago
এর মতো জিনিসগুলির সাথে পরিচিত। .
এই পদ্ধতিগুলি বিশুদ্ধ রুবিতে পাওয়া যায় না, এগুলি ActiveSupport
দ্বারা যোগ করা হয় রেলের উপাদান।
এখানে আপনি কিছু উদাহরণ খুঁজে পেতে পারেন, লক্ষ্য করুন কিভাবে এই পদ্ধতিগুলি Time
ফেরত দেয় না অথবা Date
বস্তু, কিন্তু একটি কাস্টম ActiveSupport
ক্লাস।
1.hour.to_i # 36001.day # ActiveSupport::Duration3.days.ago # ActiveSupport::TimeWithZone
আপনি এগুলো দিয়ে সময়ের গণিত করতে পারেন এবং আগামীকালের তারিখের মতো জিনিস পেতে পারেন:
Time.now + 1.day
অন্যান্য রেল-এক্সক্লুসিভ সময় পদ্ধতি:
তারিখ =Time.currentdate.change(hour:20)date.at_beginning_of_day
এবং বিন্যাসের জন্য:
তারিখ =Date.todaydate.to_formatted_s(:short) # "16 Jul"date.to_formatted_s(:long) # "July 16, 2018"
এই পদ্ধতির জন্য কোড আসলে বেশ সহজ, আপনি একটি কটাক্ষপাত করা উচিত. TimeWithZone-এর সোর্স কোডটিও একবার দেখে নেওয়ার মতো।
সারাংশ
এই নিবন্ধে আপনি সময় ও তারিখের ক্লাস, রুবিতে কীভাবে সময় পার্স ও ফর্ম্যাট করবেন এবং অ্যাক্টিভসাপোর্ট টাইম এক্সটেনশনগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে শিখেছেন৷
পড়ার জন্য ধন্যবাদ!