1a070cf53SStephan Aßmus /* 229e8fa59SJohn Scipione * Copyright 2007-2010 Haiku, Inc. All rights reserved. 3a070cf53SStephan Aßmus * Distributed under the terms of the MIT License. 4a070cf53SStephan Aßmus */ 529e8fa59SJohn Scipione #ifndef _DATE_TIME_H 629e8fa59SJohn Scipione #define _DATE_TIME_H 7a070cf53SStephan Aßmus 8a070cf53SStephan Aßmus 9a070cf53SStephan Aßmus #include <String.h> 10a070cf53SStephan Aßmus 11a070cf53SStephan Aßmus 12a070cf53SStephan Aßmus class BMessage; 13a070cf53SStephan Aßmus 14a070cf53SStephan Aßmus 15a070cf53SStephan Aßmus namespace BPrivate { 16a070cf53SStephan Aßmus 17a070cf53SStephan Aßmus enum time_type { 18a070cf53SStephan Aßmus B_GMT_TIME, 19a070cf53SStephan Aßmus B_LOCAL_TIME 20a070cf53SStephan Aßmus }; 21a070cf53SStephan Aßmus 22a070cf53SStephan Aßmus 23a070cf53SStephan Aßmus enum diff_type { 24a070cf53SStephan Aßmus B_HOURS_DIFF, 25a070cf53SStephan Aßmus B_MINUTES_DIFF, 26a070cf53SStephan Aßmus B_SECONDS_DIFF, 27a070cf53SStephan Aßmus B_MILLISECONDS_DIFF, 28a070cf53SStephan Aßmus B_MICROSECONDS_DIFF 29a070cf53SStephan Aßmus }; 30a070cf53SStephan Aßmus 31a070cf53SStephan Aßmus 32a070cf53SStephan Aßmus class BTime { 33a070cf53SStephan Aßmus public: 34a070cf53SStephan Aßmus BTime(); 35bbba047cSStephan Aßmus BTime(const BTime& other); 36a070cf53SStephan Aßmus BTime(int32 hour, int32 minute, int32 second, 37a070cf53SStephan Aßmus int32 microsecond = 0); 38a070cf53SStephan Aßmus BTime(const BMessage* archive); 39a070cf53SStephan Aßmus ~BTime(); 40a070cf53SStephan Aßmus 41a070cf53SStephan Aßmus status_t Archive(BMessage* into) const; 42a070cf53SStephan Aßmus 43a070cf53SStephan Aßmus bool IsValid() const; 44daf3c505SJérôme Duval static bool IsValid(const BTime& time); 45daf3c505SJérôme Duval static bool IsValid(int32 hour, int32 minute, int32 second, 46daf3c505SJérôme Duval int32 microsecond = 0); 47a070cf53SStephan Aßmus 48a070cf53SStephan Aßmus static BTime CurrentTime(time_type type); 49a070cf53SStephan Aßmus 50a070cf53SStephan Aßmus BTime Time() const; 51a070cf53SStephan Aßmus bool SetTime(const BTime& time); 52a070cf53SStephan Aßmus bool SetTime(int32 hour, int32 minute, int32 second, 53a070cf53SStephan Aßmus int32 microsecond = 0); 54a070cf53SStephan Aßmus 55bbba047cSStephan Aßmus BTime& AddHours(int32 hours); 56bbba047cSStephan Aßmus BTime& AddMinutes(int32 minutes); 57bbba047cSStephan Aßmus BTime& AddSeconds(int32 seconds); 58bbba047cSStephan Aßmus BTime& AddMilliseconds(int32 milliseconds); 59bbba047cSStephan Aßmus BTime& AddMicroseconds(int32 microseconds); 60a070cf53SStephan Aßmus 61a070cf53SStephan Aßmus int32 Hour() const; 62a070cf53SStephan Aßmus int32 Minute() const; 63a070cf53SStephan Aßmus int32 Second() const; 64a070cf53SStephan Aßmus int32 Millisecond() const; 65a070cf53SStephan Aßmus int32 Microsecond() const; 66a070cf53SStephan Aßmus bigtime_t Difference(const BTime& time, 67a070cf53SStephan Aßmus diff_type type) const; 68a070cf53SStephan Aßmus 69a070cf53SStephan Aßmus bool operator!=(const BTime& time) const; 70a070cf53SStephan Aßmus bool operator==(const BTime& time) const; 71a070cf53SStephan Aßmus 72a070cf53SStephan Aßmus bool operator<(const BTime& time) const; 73a070cf53SStephan Aßmus bool operator<=(const BTime& time) const; 74a070cf53SStephan Aßmus 75a070cf53SStephan Aßmus bool operator>(const BTime& time) const; 76a070cf53SStephan Aßmus bool operator>=(const BTime& time) const; 77a070cf53SStephan Aßmus 78a070cf53SStephan Aßmus private: 79a070cf53SStephan Aßmus bigtime_t _Microseconds() const; 80bbba047cSStephan Aßmus BTime& _AddMicroseconds(bigtime_t microseconds); 81a070cf53SStephan Aßmus bool _SetTime(bigtime_t hour, bigtime_t minute, 82a070cf53SStephan Aßmus bigtime_t second, bigtime_t microsecond); 83a070cf53SStephan Aßmus 84a070cf53SStephan Aßmus private: 85a070cf53SStephan Aßmus bigtime_t fMicroseconds; 86a070cf53SStephan Aßmus }; 87a070cf53SStephan Aßmus 88a070cf53SStephan Aßmus 89a070cf53SStephan Aßmus class BDate { 90a070cf53SStephan Aßmus public: 91a070cf53SStephan Aßmus BDate(); 92bbba047cSStephan Aßmus BDate(const BDate& other); 93a070cf53SStephan Aßmus BDate(int32 year, int32 month, int32 day); 94*19d8cb70SAxel Dörfler BDate(time_t time, 95*19d8cb70SAxel Dörfler time_type type = B_LOCAL_TIME); 96a070cf53SStephan Aßmus BDate(const BMessage* archive); 97a070cf53SStephan Aßmus ~BDate(); 98a070cf53SStephan Aßmus 99a070cf53SStephan Aßmus status_t Archive(BMessage* into) const; 100a070cf53SStephan Aßmus 101a070cf53SStephan Aßmus bool IsValid() const; 102daf3c505SJérôme Duval static bool IsValid(const BDate& date); 103daf3c505SJérôme Duval static bool IsValid(int32 year, int32 month, 104daf3c505SJérôme Duval int32 day); 105a070cf53SStephan Aßmus 106a070cf53SStephan Aßmus static BDate CurrentDate(time_type type); 107a070cf53SStephan Aßmus 108a070cf53SStephan Aßmus BDate Date() const; 109a070cf53SStephan Aßmus bool SetDate(const BDate& date); 110a070cf53SStephan Aßmus 111a070cf53SStephan Aßmus bool SetDate(int32 year, int32 month, int32 day); 112daf3c505SJérôme Duval void GetDate(int32* year, int32* month, 113daf3c505SJérôme Duval int32* day) const; 114a070cf53SStephan Aßmus 115a070cf53SStephan Aßmus void AddDays(int32 days); 116a070cf53SStephan Aßmus void AddYears(int32 years); 117a070cf53SStephan Aßmus void AddMonths(int32 months); 118a070cf53SStephan Aßmus 119a070cf53SStephan Aßmus int32 Day() const; 120a070cf53SStephan Aßmus int32 Year() const; 121a070cf53SStephan Aßmus int32 Month() const; 122a070cf53SStephan Aßmus int32 Difference(const BDate& date) const; 123a070cf53SStephan Aßmus 124afd5ec11SAdrien Destugues void SetDay(int32 day); 125afd5ec11SAdrien Destugues void SetMonth(int32 month); 126afd5ec11SAdrien Destugues void SetYear(int32 year); 127afd5ec11SAdrien Destugues 128a070cf53SStephan Aßmus int32 DayOfWeek() const; 129a070cf53SStephan Aßmus int32 DayOfYear() const; 130a070cf53SStephan Aßmus 131a070cf53SStephan Aßmus int32 WeekNumber() const; 132daf3c505SJérôme Duval bool IsLeapYear() const; 133daf3c505SJérôme Duval static bool IsLeapYear(int32 year); 134a070cf53SStephan Aßmus 135a070cf53SStephan Aßmus int32 DaysInYear() const; 136a070cf53SStephan Aßmus int32 DaysInMonth() const; 137a070cf53SStephan Aßmus 138bbba047cSStephan Aßmus BString ShortDayName() const; 139bbba047cSStephan Aßmus static BString ShortDayName(int32 day); 140a070cf53SStephan Aßmus 141bbba047cSStephan Aßmus BString ShortMonthName() const; 142bbba047cSStephan Aßmus static BString ShortMonthName(int32 month); 143bbba047cSStephan Aßmus 144bbba047cSStephan Aßmus BString LongDayName() const; 145bbba047cSStephan Aßmus static BString LongDayName(int32 day); 146bbba047cSStephan Aßmus 147bbba047cSStephan Aßmus BString LongMonthName() const; 148bbba047cSStephan Aßmus static BString LongMonthName(int32 month); 149a070cf53SStephan Aßmus 150a070cf53SStephan Aßmus int32 DateToJulianDay() const; 151a070cf53SStephan Aßmus static BDate JulianDayToDate(int32 julianDay); 152a070cf53SStephan Aßmus 153a070cf53SStephan Aßmus bool operator!=(const BDate& date) const; 154a070cf53SStephan Aßmus bool operator==(const BDate& date) const; 155a070cf53SStephan Aßmus 156a070cf53SStephan Aßmus bool operator<(const BDate& date) const; 157a070cf53SStephan Aßmus bool operator<=(const BDate& date) const; 158a070cf53SStephan Aßmus 159a070cf53SStephan Aßmus bool operator>(const BDate& date) const; 160a070cf53SStephan Aßmus bool operator>=(const BDate& date) const; 161a070cf53SStephan Aßmus 162a070cf53SStephan Aßmus private: 163daf3c505SJérôme Duval static int32 _DaysInMonth(int32 year, int32 month); 164a070cf53SStephan Aßmus bool _SetDate(int32 year, int32 month, int32 day); 165daf3c505SJérôme Duval static int32 _DateToJulianDay(int32 year, int32 month, 166daf3c505SJérôme Duval int32 day); 167a070cf53SStephan Aßmus 168a070cf53SStephan Aßmus private: 169a070cf53SStephan Aßmus int32 fDay; 170a070cf53SStephan Aßmus int32 fYear; 171a070cf53SStephan Aßmus int32 fMonth; 172a070cf53SStephan Aßmus }; 173a070cf53SStephan Aßmus 174a070cf53SStephan Aßmus 175a070cf53SStephan Aßmus class BDateTime { 176a070cf53SStephan Aßmus public: 177a070cf53SStephan Aßmus BDateTime(); 178a070cf53SStephan Aßmus BDateTime(const BDate &date, const BTime &time); 179a070cf53SStephan Aßmus BDateTime(const BMessage* archive); 180a070cf53SStephan Aßmus ~BDateTime(); 181a070cf53SStephan Aßmus 182a070cf53SStephan Aßmus status_t Archive(BMessage* into) const; 183a070cf53SStephan Aßmus 184a070cf53SStephan Aßmus bool IsValid() const; 185a070cf53SStephan Aßmus 186a070cf53SStephan Aßmus static BDateTime CurrentDateTime(time_type type); 187a070cf53SStephan Aßmus void SetDateTime(const BDate &date, const BTime &time); 188a070cf53SStephan Aßmus 189bbba047cSStephan Aßmus BDate& Date(); 190bbba047cSStephan Aßmus const BDate& Date() const; 191a070cf53SStephan Aßmus void SetDate(const BDate &date); 192a070cf53SStephan Aßmus 193bbba047cSStephan Aßmus BTime& Time(); 194bbba047cSStephan Aßmus const BTime& Time() const; 195a070cf53SStephan Aßmus void SetTime(const BTime &time); 196a070cf53SStephan Aßmus 197d05f9e2dSAdrien Destugues time_t Time_t() const; 198d05f9e2dSAdrien Destugues void SetTime_t(time_t seconds); 199a070cf53SStephan Aßmus 200a070cf53SStephan Aßmus bool operator!=(const BDateTime& dateTime) const; 201a070cf53SStephan Aßmus bool operator==(const BDateTime& dateTime) const; 202a070cf53SStephan Aßmus 203a070cf53SStephan Aßmus bool operator<(const BDateTime& dateTime) const; 204a070cf53SStephan Aßmus bool operator<=(const BDateTime& dateTime) const; 205a070cf53SStephan Aßmus 206a070cf53SStephan Aßmus bool operator>(const BDateTime& dateTime) const; 207a070cf53SStephan Aßmus bool operator>=(const BDateTime& dateTime) const; 208a070cf53SStephan Aßmus 209a070cf53SStephan Aßmus private: 210a070cf53SStephan Aßmus BDate fDate; 211a070cf53SStephan Aßmus BTime fTime; 212a070cf53SStephan Aßmus }; 213a070cf53SStephan Aßmus 214a070cf53SStephan Aßmus } // namespace BPrivate 215a070cf53SStephan Aßmus 216a070cf53SStephan Aßmus using BPrivate::time_type; 217a070cf53SStephan Aßmus using BPrivate::B_GMT_TIME; 218a070cf53SStephan Aßmus using BPrivate::B_LOCAL_TIME; 219a070cf53SStephan Aßmus using BPrivate::diff_type; 220a070cf53SStephan Aßmus using BPrivate::B_HOURS_DIFF; 221a070cf53SStephan Aßmus using BPrivate::B_MINUTES_DIFF; 222a070cf53SStephan Aßmus using BPrivate::B_SECONDS_DIFF; 223a070cf53SStephan Aßmus using BPrivate::B_MILLISECONDS_DIFF; 224a070cf53SStephan Aßmus using BPrivate::B_MICROSECONDS_DIFF; 225a070cf53SStephan Aßmus using BPrivate::BTime; 226a070cf53SStephan Aßmus using BPrivate::BDate; 227a070cf53SStephan Aßmus using BPrivate::BDateTime; 228a070cf53SStephan Aßmus 229a070cf53SStephan Aßmus 23029e8fa59SJohn Scipione #endif // _DATE_TIME_H 231