/*
* Copyright 1995, 1996 Perforce Software. All rights reserved.
*
* This file is part of Perforce - the FAST SCM System.
*/
/*
* DateTime - get and set the date as a string
*/
// size for Fmt, FmtDay
# define DateTimeBufSize 20
// size for FmtTz, which can say things like '0700 - Pacific Standard Time'
# define DateTimeZoneBufSize 80
class DateTime {
public:
DateTime() {}
DateTime( const int date ) { Set( date ); }
DateTime( const char *date, Error *e ) { Set( date, e ); }
void Set( const char *date, Error *e );
void Set( const int date ) { wholeDay = 0; tval = (time_t)date; }
void SetNow() { Set( (int)Now() ); }
int Compare( const DateTime &t2 ) const {
return (int)(tval - t2.tval); };
void Fmt( char *buf ) const;
void FmtDay( char *buf ) const;
void FmtDayUTC( char *buf ) const;
void FmtTz( char *buf ) const;
void FmtUTC( char *buf ) const;
void FmtElapsed( char *buf, const DateTime &t2 );
void FmtUnifiedDiff( char *buf ) const;
int Value() const { return (int)tval; }
int Tomorrow() const { return (int)tval + 24*60*60; }
int IsWholeDay() const { return wholeDay; }
static int Never() { return 0; }
static int Forever() { return 2147483647; }
// for stat() and utime() conversion
static time_t Localize( time_t centralTime );
static time_t Centralize( time_t localTime );
int TzOffset( int *isdst = 0 ) const;
protected:
time_t Now();
private:
time_t tval;
int wholeDay;
int ParseOffset( const char *s, const char *odate, Error *e );
};
class DateTimeNow : public DateTime {
public:
DateTimeNow() { Set( Now() ); }
} ;
// Pass a buffer of at least this size to DateTimeHighPrecision::Fmt():
# define DTHighPrecisionBufSize 40
/*
* Uses gettimeofday/clock_gettime/etc. to find more precise system time
*/
class DateTimeHighPrecision
{
public:
// Orthodox Canonical Form (OCF) methods (we don't need a dtor)
DateTimeHighPrecision(time_t secs = 0, int nsecs = 0)
: seconds( secs ), nanos( nsecs ) { }
DateTimeHighPrecision(const DateTimeHighPrecision &rhs)
: seconds( rhs.seconds ), nanos( rhs.nanos ) { }
DateTimeHighPrecision &
operator=( const DateTimeHighPrecision &rhs );
DateTimeHighPrecision &
operator+=( const DateTimeHighPrecision &rhs );
DateTimeHighPrecision &
operator-=( const DateTimeHighPrecision &rhs );
bool
operator==(
const DateTimeHighPrecision &rhs) const;
bool
operator!=(
const DateTimeHighPrecision &rhs) const;
bool
operator<(
const DateTimeHighPrecision &rhs) const;
bool
operator<=(
const DateTimeHighPrecision &rhs) const;
bool
operator>(
const DateTimeHighPrecision &rhs) const;
bool
operator>=(
const DateTimeHighPrecision &rhs) const;
void Now();
void Fmt( char *buf ) const;
time_t Seconds() const;
int Nanos() const;
bool IsZero() const { return seconds == 0 && nanos == 0; }
// return (t2 - *this) in nanoseconds
P4INT64 ElapsedNanos( const DateTimeHighPrecision &t2 ) const;
void FmtElapsed( StrBuf &buf, const DateTimeHighPrecision t2 ) const;
// return < 0, = 0, or > 0 if *this < rhs, *this == rhs, or *this > rhs, respectively
int Compare( const DateTimeHighPrecision &rhs ) const;
private:
P4INT64 ToNanos() const;
time_t seconds; // Since 1/1/1970, natch
int nanos;
} ;
# |
Change |
User |
Description |
Committed |
|
#1
|
21040 |
rlranft |
Update my branches from latest |
|
|
//guest/perforce_software/p4/2016-1/support/datetime.h |
#1
|
19472 |
Liz Lam |
Initial add of the 2016.1 p4/p4api source code. |
|
|