TSecTm TSecTm::Round(const TTmUnit& TmUnit) const { if (TmUnit == tmu1Sec) { return *this; } struct tm Time; IAssert(IsDef() && GetTmStruct(AbsSecs(), Time)); switch (TmUnit) { case tmu1Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, Time.tm_min, 0); case tmu10Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 10*(Time.tm_min/10), 0); case tmu15Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 15*(Time.tm_min/15), 0); case tmu30Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 30*(Time.tm_min/30), 0); case tmu1Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 0, 0); case tmu2Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 2*(Time.tm_hour/2), 0, 0); case tmu4Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 4*(Time.tm_hour/4), 0, 0); case tmu6Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 6*(Time.tm_hour/6), 0, 0); case tmu12Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 12*(Time.tm_hour/12), 0, 0); case tmuDay : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 0, 0, 0); case tmuMonth : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, 1, 0, 0, 0); case tmuYear : return TSecTm(Time.tm_year+1900, 1, 1, 0, 0, 0); case tmuWeek : { int dd=1, mm=1, yy=1; // week starts on Thursday, since 1.1.1970 is Thursday const int Day = TJulianDate::GetJulianDateN(Time.tm_mday, Time.tm_mon+1, 1900+Time.tm_year); TJulianDate::GetCalendarDate(3+7*(Day/7), dd, mm, yy); return TSecTm(yy, mm, dd, 0, 0, 0); } default : Fail; } return TSecTm(); }
TStr TSecTm::GetTmMinStr() const { if (IsDef()){ struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); return TStr::Fmt("%02d:%02d", Tm.tm_min, Tm.tm_sec); } else { return "Undef"; } }
void TSecTm::GetComps(int& Year, int& Month, int& Day, int& Hour, int& Min, int& Sec) const { struct tm Tm; EAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); Year = Tm.tm_year+1900; Month = Tm.tm_mon+1; Day = Tm.tm_mday; Hour = Tm.tm_hour; Min = Tm.tm_min; Sec = Tm.tm_sec; }
TStr TSecTm::GetDtStr(const TLoc& Loc) const { if (IsDef()){ struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); return TStr::Fmt("%s %s %d %d", TTmInfo::GetDayOfWeekNm(Tm.tm_wday + 1, Loc).CStr(), TTmInfo::GetMonthNm(Tm.tm_mon + 1, Loc).CStr(), Tm.tm_year+1900); } else { return "Undef"; } }
TStr TSecTm::GetStr(const TLoc& Loc) const { if (IsDef()) { struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); // Wed May 14 15:30:17 2003 return TStr::Fmt("%s %s %d %02d:%02d:%02d %d", TTmInfo::GetDayOfWeekNm(Tm.tm_wday + 1, Loc).CStr(), TTmInfo::GetMonthNm(Tm.tm_mon + 1, Loc).CStr(), Tm.tm_mday, Tm.tm_hour, Tm.tm_min, Tm.tm_sec, Tm.tm_year+1900); } else { return "Undef"; } }
uint TSecTm::GetInUnits(const TTmUnit& TmUnit) const { static const int DayZero = TJulianDate::GetJulianDateN(1, 1, 1970); if (TmUnit == tmu1Sec) { return AbsSecs; } struct tm Time; IAssert(IsDef() && GetTmStruct(AbsSecs(), Time)); switch (TmUnit) { case tmu1Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, Time.tm_min, 0).GetAbsSecs()/60; case tmu10Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 10*(Time.tm_min/10), 0).GetAbsSecs()/(10*60); case tmu15Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 15*(Time.tm_min/15), 0).GetAbsSecs()/(15*60); case tmu30Min : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 30*(Time.tm_min/30), 0).GetAbsSecs()/(30*60); case tmu1Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, Time.tm_hour, 0, 0).GetAbsSecs()/3600; case tmu2Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 2*(Time.tm_hour/2), 0, 0).GetAbsSecs()/(2*3600); case tmu4Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 4*(Time.tm_hour/4), 0, 0).GetAbsSecs()/(4*3600); case tmu6Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 6*(Time.tm_hour/6), 0, 0).GetAbsSecs()/(6*3600); case tmu12Hour : return TSecTm(Time.tm_year+1900, Time.tm_mon+1, Time.tm_mday, 12*(Time.tm_hour/12), 0, 0).GetAbsSecs()/(12*3600); case tmuDay : return TJulianDate::GetJulianDateN(Time.tm_mday, Time.tm_mon+1, 1900+Time.tm_year) - DayZero; case tmuWeek : return (TJulianDate::GetJulianDateN(Time.tm_mday, Time.tm_mon+1, 1900+Time.tm_year)-DayZero)/7; case tmuMonth : return 12*(Time.tm_year-70)+Time.tm_mon+1; case tmuYear : return Time.tm_year+1900; default : Fail; } return TUInt::Mx; }
int TSecTm::GetSecN() const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return Tm.tm_sec; }
TStr TSecTm::GetDayOfWeekNm(const TLoc& Loc) const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return TTmInfo::GetDayOfWeekNm(Tm.tm_wday+1, Loc); }
int TSecTm::GetDayOfWeekN() const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return Tm.tm_wday + 1; }
TStr TSecTm::GetMonthNm(const TLoc& Loc) const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return TTmInfo::GetMonthNm(Tm.tm_mon+1, Loc); }
int TSecTm::GetMonthN() const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return Tm.tm_mon+1; }
int TSecTm::GetYearN() const { struct tm Tm; IAssert(IsDef() && GetTmStruct(AbsSecs(), Tm)); return Tm.tm_year+1900; }
TStr TSecTm::GetYmdTmStr() const { struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); return TStr::Fmt("%04d-%02d-%02d %02d:%02d:%02d", Tm.tm_year+1900, Tm.tm_mon+1, Tm.tm_mday, Tm.tm_hour, Tm.tm_min, Tm.tm_sec); }
TStr TSecTm::GetDtYmdStr() const { struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); return TStr::Fmt("%04d-%02d-%02d", Tm.tm_year+1900, Tm.tm_mon+1, Tm.tm_mday); }
TStr TSecTm::GetDtMdyStr() const { struct tm Tm; IAssert(GetTmStruct(AbsSecs(), Tm)); return TStr::Fmt("%02d/%02d%/%04d", Tm.tm_mon+1, Tm.tm_mday, Tm.tm_year+1900); }