সময় ব্যবস্থাপনা খুব জটিল। সময় সম্পর্কিত সাধারণ ভুল ধারণা এমন হলো নিম্নলিখিত।
- দিন সম্পূর্ণ হলো ২৪ ঘণ্টা।
- এক ঘণ্টা ৬০ মিনিট ধরে।
- এক সপ্তাহে সাত দিন থাকে।
- এক বছরে ৩৬৫ দিন থাকে।
উদাহরণস্বরূপ, 1 এর অর্থ হলো নির্দিষ্ট সময়ে ২৪ ঘণ্টা যোগ করলে সাধারণ বর্ষপত্রে নতুন একটি দিন উদ্ভব হয় না।
তাই, সময় নিয়ে কাজ করার সময় সর্বদা উর্ধ্বতম এবং সঠিক পথে এগিয়ে যান "time"
প্যাকেজ ব্যবহার করুন, যা এই ভুল ধারণাগুলি সঁজুলে এবং আরও নিরাপদ এবং নির্ভুত ভাবে ব্যবস্থা করার সাহায্য করে।
ছবিতে time.Time
ব্যবহার করে ছবিপ্রস্থান সময় প্রতিনিধিতা করা
ছবিপ্রস্থান সময়ে কাজে সময় পোষাকে ব্যবহার করুন time.Time
এবং এর পদ্ধতিগুলি ব্যবহার করুন সময় তুলনা, যোগ করা, বা বিয়োগ করা।
সুপারিশ না করা:
func isActive(now, start, stop int) bool {
return start <= now && now < stop
}
সুপারিশ করা:
func isActive(now, start, stop time.Time) bool {
return (start.Before(now) || start.Equal(now)) && now.Before(stop)
}
time.Duration
ব্যবহার করে সময় স্থায়ীতা প্রতিরূপ করা
সময় স্থায়ীতা প্রতিরূপে কাজ করার সময় সময় পোষাকে ব্যবহার করুন time.Duration
।
সুপারিশ না করা:
func poll(delay int) {
for {
// ...
time.Sleep(time.Duration(delay) * time.Millisecond)
}
}
poll(10) // এটি সেকেন্ড কিনা বা মিলিসেকেন্ড?
সুপারিশ করা:
func poll(delay time.Duration) {
for {
// ...
time.Sleep(delay)
}
}
poll(10*time.Second)
প্রথম উদাহরণে ফিরে যাই, ছবিপ্রস্থান সময়ে ২৪ ঘণ্টা যোগ করা হলে, ব্যবহৃত পদ্ধতি উদ্ভাবের উদ্দেশ্যত্রয় নির্ভর করে। আমরা যদি একই সময় নকল বর্ষপত্রের পরে আগামী দিনে নির্ধারিত সময় বিন্যাস করতে চাই, তবে আমরা ব্যবহার করতে হবে Time.AddDate
। তবে, আমরা যদি একই সাময়িক নির্ধারণ করতে চাই যে ২৪ ঘণ্টা আগের তারেখা থেকে পরবর্তী একটি নির্ধারিত মুহূর্ত নিশ্চিত করতে চাই, তবে আমাদের ব্যবহার করতে হবে Time.Add
।
newDay := t.AddDate(0 /* বছর */, 0 /* মাস */, 1 /* দিন */)
maybeNewDay := t.Add(24 * time.Hour)
বাহ্যিক সিস্টেম সঙ্গে time.Time
এবং time.Duration
ব্যবহার
যখনই সম্ভব, বিদেশী সিস্টেম সঙ্গে অনুপ্রেরণা ক্রিয়া করার জন্য time.Duration
এবং time.Time
ব্যবহার করুন, উদাহরণস্বরূপ:
- কমান্ড-লাইন ফ্ল্যাগগুলি:
flag
ব্যবহার করেtime.ParseDuration
দিয়েtime.Duration
সমর্থন করে। - JSON:
encoding/json
এtime.Time
কে RFC 3339 স্ট্রিংয়ে এনকোড করার জন্য এরUnmarshalJSON
মেথড সমর্থন করে। - SQL:
database/sql
ব্যবহার করেDATETIME
বাTIMESTAMP
কলামগুলি কেtime.Time
এ রূপান্তর করে এবং তা প্রত্যাধিকারী ড্রাইভার যদি সমর্থন করে তাহলে এটি প্রদান করে। - YAML:
gopkg.in/yaml.v2
এtime.Time
এবংtime.Duration
সমর্থন করে যাতে এগুলি RFC 3339 স্ট্রিং হয়।time.ParseDuration
দিয়ে।
যখন এই ইন্টারেকশনে time.Duration
ব্যবহার করা যায় না, তখন ফিল্ড নামে ইউনিটটি সহ int
বা float64
ব্যবহার করুন।
উদাহরণস্বরূপ, যেমন, encoding/json
যখন time.Duration
সমর্থন করে না, তখন ফিল্ড নামে ইউনিটটি সহ ব্যবহার করা হয়।
অনুমোদিত নয়:
// {"interval": 2}
type Config struct {
Interval int `json:"interval"`
}
অনুমোদিত:
// {"intervalMillis": 2000}
type Config struct {
IntervalMillis int `json:"intervalMillis"`
}
যেসব ইন্টারেকশনে time.Time
ব্যবহার করা যায় না, মাঝেমধ্যে অনুমতি দেওয়া না হলে, স্ট্রিং ব্যবহার করুন এবং RFC 3339 অনুসারে টাইমস্ট্যাম্প ফরম্যাট করুন। ডিফল্টভাবে, Time.UnmarshalText
এই ফরম্যাট ব্যবহার করে এবং এটি Time.Format
এবং time.Parse
এ time.RFC3339
দিয়ে ব্যবহার করা যায়।
সংস্কার শঙ্কাস্বরূপ, দয়া করে মনে রাখবেন যে, "time"
প্যাকেজটি লীপ সেকেন্ড টাইমস্ট্যাম্প পার্সিং সমর্থন করে না (8728), এবং গণনায় লীপ সেকেন্ড অবগত করে না (15190)। যদি আপনি দুটি সময়ের মুহূর্ত তুলনা করেন, তার মধ্যে যে কোনও লীপ সেকেন্ড যুক্ত নহয় যা উভয় সময়ের মধ্যে ঘটে হতে পারে।