Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
FIX::DateTime Struct Reference

#include <FieldTypes.h>

Inheritance diagram for FIX::DateTime:
Inheritance graph
[legend]

Public Member Functions

 DateTime ()
 Default constructor - initializes to zero. More...
 
 DateTime (int date, int64_t time)
 Construct from a Julian day number and time in millis. More...
 
 DateTime (int year, int month, int day, int hour, int minute, int second, int millis)
 Construct from the specified components. More...
 
 DateTime (int year, int month, int day, int hour, int minute, int second, int fraction, int precision)
 Construct from the specified components. More...
 
virtual ~DateTime ()
 
int getYear () const
 Return the year portion of the date. More...
 
int getMonth () const
 Return the month (1-12) portion of the date. More...
 
int getDay () const
 Return the day of the month portion of the date. More...
 
int getDate () const
 Another name for the day of the month. More...
 
int getJulianDate () const
 Return the internal julian date. More...
 
int getHour () const
 Return the hour portion of the time (0-23) More...
 
int getMinute () const
 Return the minute portion of the time (0-59) More...
 
int getSecond () const
 Return the second portion of the time (0-59) More...
 
int getMillisecond () const
 Return the millisecond portion of the time (0-999) More...
 
int getMicroecond () const
 Return the microsecond portion of the time. More...
 
unsigned int getNanosecond () const
 Return the nanosecond portion of the time. More...
 
int getFraction (int precision) const
 Return the fraction portion of the time. More...
 
void getYMD (int &year, int &month, int &day) const
 Load the referenced values with the year, month and day portions of the date in a single operation. More...
 
void getHMS (int &hour, int &minute, int &second, int &millis) const
 Load the referenced values with the hour, minute, second and millisecond portions of the time in a single operation. More...
 
void getHMS (int &hour, int &minute, int &second, int &fraction, int precision) const
 Load the referenced values with the hour, minute, second and fraction portions of the time in a single operation. More...
 
int getWeekDay () const
 Calculate the weekday of the date (Sunday is 1, Saturday is 7) More...
 
time_t getTimeT () const
 Convert the DateTime to a time_t. More...
 
tm getTmUtc () const
 Convert the DateTime to a struct tm which is in UTC. More...
 
void setYMD (int year, int month, int day)
 Set the date portion of the DateTime. More...
 
void setHMS (int hour, int minute, int second, int millis)
 Set the time portion of the DateTime. More...
 
void setHMS (int hour, int minute, int second, int fraction, int precision)
 Set the time portion of the DateTime. More...
 
void setHour (int hour)
 Set the hour portion of the time. More...
 
void setMinute (int min)
 Set the minute portion of the time. More...
 
void setSecond (int sec)
 Set the seconds portion of the time. More...
 
void setMillisecond (int millis)
 Set the millisecond portion of the time. More...
 
void setMicrosecond (int micros)
 Set the microsecond portion of the time. More...
 
void setNanosecond (int nanos)
 Set the nanosecond portion of the time. More...
 
void setFraction (int fraction, int precision)
 Set the fraction portion of the time. More...
 
void clearDate ()
 Clear the date portion of the DateTime. More...
 
void clearTime ()
 Clear the time portion of the DateTime. More...
 
void set (int date, int64_t time)
 Set the internal date and time members. More...
 
void set (const DateTime &other)
 Initialize from another DateTime. More...
 
void operator+= (int seconds)
 Add a number of seconds to this. More...
 

Static Public Member Functions

static int convertToNanos (int fraction, int precision)
 Convert to internal nanos. More...
 
static int64_t makeHMS (int hour, int minute, int second, int nanos)
 Helper method to convert a broken down time to a number of nanoseconds since midnight. More...
 
static DateTime nowUtc ()
 Return the current wall-clock time as a utc DateTime. More...
 
static DateTime nowLocal ()
 Return the current wall-clock time as a local DateTime. More...
 
static DateTime fromUtcTimeT (time_t t, int millis=0)
 Convert a time_t and optional milliseconds to a DateTime. More...
 
static DateTime fromLocalTimeT (time_t t, int millis=0)
 
static DateTime fromUtcTimeT (time_t t, int fraction, int precision)
 
static DateTime fromLocalTimeT (time_t t, int fraction, int precision)
 
static DateTime fromTm (const tm &tm, int millis=0)
 Convert a tm and optional milliseconds to a DateTime. More...
 
static DateTime fromTm (const tm &tm, int fraction, int precision)
 Convert a tm and optional milliseconds to a DateTime. More...
 
static int julianDate (int year, int month, int day)
 Helper method to calculate a Julian day number. More...
 
static void getYMD (int jday, int &year, int &month, int &day)
 Convert a Julian day number to a year, month and day. More...
 

Public Attributes

int m_date
 
int64_t m_time
 

Static Public Attributes

static const int64_t SECONDS_PER_DAY = 86400
 Magic numbers. More...
 
static const int64_t SECONDS_PER_HOUR = 3600
 
static const int64_t SECONDS_PER_MIN = 60
 
static const int64_t MINUTES_PER_HOUR = 60
 
static const int64_t NANOS_PER_DAY = 86400000000000
 
static const int64_t NANOS_PER_HOUR = 3600000000000
 
static const int64_t NANOS_PER_MIN = 60000000000
 
static const int64_t NANOS_PER_SEC = 1000000000
 
static const int64_t JULIAN_19700101 = 2440588
 

Detailed Description

Definition at line 60 of file FieldTypes.h.

Constructor & Destructor Documentation

◆ DateTime() [1/4]

FIX::DateTime::DateTime ( )
inline

Default constructor - initializes to zero.

Definition at line 80 of file FieldTypes.h.

Referenced by fromTm().

80 : m_date (0), m_time (0) {}
int64_t m_time
Definition: FieldTypes.h:63

◆ DateTime() [2/4]

FIX::DateTime::DateTime ( int  date,
int64_t  time 
)
inline

Construct from a Julian day number and time in millis.

Definition at line 83 of file FieldTypes.h.

83 : m_date (date), m_time (time) {}
int64_t m_time
Definition: FieldTypes.h:63

◆ DateTime() [3/4]

FIX::DateTime::DateTime ( int  year,
int  month,
int  day,
int  hour,
int  minute,
int  second,
int  millis 
)
inline

Construct from the specified components.

Definition at line 86 of file FieldTypes.h.

References julianDate(), and makeHMS().

88  {
89  m_date = julianDate( year, month, day );
90  m_time = makeHMS( hour, minute, second, millis * PRECISION_FACTOR[3] );
91  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
static int julianDate(int year, int month, int day)
Helper method to calculate a Julian day number.
Definition: FieldTypes.h:512
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
int64_t m_time
Definition: FieldTypes.h:63

◆ DateTime() [4/4]

FIX::DateTime::DateTime ( int  year,
int  month,
int  day,
int  hour,
int  minute,
int  second,
int  fraction,
int  precision 
)
inline

Construct from the specified components.

Definition at line 94 of file FieldTypes.h.

References convertToNanos(), julianDate(), and makeHMS().

96  {
97  m_date = julianDate( year, month, day );
98  int nanos = convertToNanos(fraction, precision);
99  m_time = makeHMS( hour, minute, second, nanos );
100  }
static int convertToNanos(int fraction, int precision)
Convert to internal nanos.
Definition: FieldTypes.h:401
static int julianDate(int year, int month, int day)
Helper method to calculate a Julian day number.
Definition: FieldTypes.h:512
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
int64_t m_time
Definition: FieldTypes.h:63

◆ ~DateTime()

virtual FIX::DateTime::~DateTime ( )
inlinevirtual

Definition at line 102 of file FieldTypes.h.

102 {}

Member Function Documentation

◆ clearDate()

void FIX::DateTime::clearDate ( )
inline

Clear the date portion of the DateTime.

Definition at line 358 of file FieldTypes.h.

Referenced by FIX::LocalTimeOnly::LocalTimeOnly(), and FIX::UtcTimeOnly::UtcTimeOnly().

359  {
360  m_date = 0;
361  }

◆ clearTime()

void FIX::DateTime::clearTime ( )
inline

Clear the time portion of the DateTime.

Definition at line 364 of file FieldTypes.h.

Referenced by FIX::LocalDate::LocalDate(), and FIX::UtcDate::UtcDate().

365  {
366  m_time = 0;
367  }
int64_t m_time
Definition: FieldTypes.h:63

◆ convertToNanos()

static int FIX::DateTime::convertToNanos ( int  fraction,
int  precision 
)
inlinestatic

Convert to internal nanos.

Definition at line 401 of file FieldTypes.h.

Referenced by DateTime(), fromTm(), and setHMS().

402  {
403  int nanos;
404 
405  switch (precision)
406  {
407  case 0:
408  nanos = fraction * PRECISION_FACTOR[0];
409  break;
410 
411  case 1:
412  nanos = fraction * PRECISION_FACTOR[1];
413  break;
414 
415  case 2:
416  nanos = fraction * PRECISION_FACTOR[2];
417  break;
418 
419  case 3:
420  nanos = fraction * PRECISION_FACTOR[3];
421  break;
422 
423  case 4:
424  nanos = fraction * PRECISION_FACTOR[4];
425  break;
426 
427  case 5:
428  nanos = fraction * PRECISION_FACTOR[5];
429  break;
430 
431  case 6:
432  nanos = fraction * PRECISION_FACTOR[6];
433  break;
434 
435  case 7:
436  nanos = fraction * PRECISION_FACTOR[7];
437  break;
438 
439  case 8:
440  nanos = fraction * PRECISION_FACTOR[8];
441  break;
442 
443  case 9:
444  default:
445  nanos = fraction * PRECISION_FACTOR[9];
446  break;
447  }
448 
449  return nanos;
450  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58

◆ fromLocalTimeT() [1/2]

static DateTime FIX::DateTime::fromLocalTimeT ( time_t  t,
int  millis = 0 
)
inlinestatic

Definition at line 474 of file FieldTypes.h.

References fromTm(), and FIX::time_localtime().

Referenced by nowLocal().

475  {
476  struct tm tm = time_localtime( &t );
477  return fromTm( tm, millis );
478  }
tm time_localtime(const time_t *t)
Definition: Utility.cpp:400
static DateTime fromTm(const tm &tm, int millis=0)
Convert a tm and optional milliseconds to a DateTime.
Definition: FieldTypes.h:494

◆ fromLocalTimeT() [2/2]

static DateTime FIX::DateTime::fromLocalTimeT ( time_t  t,
int  fraction,
int  precision 
)
inlinestatic

Definition at line 486 of file FieldTypes.h.

References fromTm(), and FIX::time_localtime().

487  {
488  struct tm tm = time_localtime( &t );
489  return fromTm( tm, fraction, precision );
490  }
tm time_localtime(const time_t *t)
Definition: Utility.cpp:400
static DateTime fromTm(const tm &tm, int millis=0)
Convert a tm and optional milliseconds to a DateTime.
Definition: FieldTypes.h:494

◆ fromTm() [1/2]

static DateTime FIX::DateTime::fromTm ( const tm &  tm,
int  millis = 0 
)
inlinestatic

Convert a tm and optional milliseconds to a DateTime.

Note
the tm structure is assumed to contain a date specified in UTC

Definition at line 494 of file FieldTypes.h.

References DateTime(), julianDate(), and makeHMS().

Referenced by fromLocalTimeT(), and fromUtcTimeT().

495  {
496  return DateTime ( julianDate(tm.tm_year + 1900, tm.tm_mon + 1,
497  tm.tm_mday),
498  makeHMS(tm.tm_hour, tm.tm_min, tm.tm_sec, millis * PRECISION_FACTOR[3]) );
499  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
static int julianDate(int year, int month, int day)
Helper method to calculate a Julian day number.
Definition: FieldTypes.h:512
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
DateTime()
Default constructor - initializes to zero.
Definition: FieldTypes.h:80

◆ fromTm() [2/2]

static DateTime FIX::DateTime::fromTm ( const tm &  tm,
int  fraction,
int  precision 
)
inlinestatic

Convert a tm and optional milliseconds to a DateTime.

Note
the tm structure is assumed to contain a date specified in UTC

Definition at line 503 of file FieldTypes.h.

References convertToNanos(), DateTime(), julianDate(), and makeHMS().

504  {
505  int nanos = convertToNanos(fraction, precision);
506  return DateTime ( julianDate(tm.tm_year + 1900, tm.tm_mon + 1,
507  tm.tm_mday),
508  makeHMS(tm.tm_hour, tm.tm_min, tm.tm_sec, nanos) );
509  }
static int convertToNanos(int fraction, int precision)
Convert to internal nanos.
Definition: FieldTypes.h:401
static int julianDate(int year, int month, int day)
Helper method to calculate a Julian day number.
Definition: FieldTypes.h:512
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
DateTime()
Default constructor - initializes to zero.
Definition: FieldTypes.h:80

◆ fromUtcTimeT() [1/2]

static DateTime FIX::DateTime::fromUtcTimeT ( time_t  t,
int  millis = 0 
)
inlinestatic

Convert a time_t and optional milliseconds to a DateTime.

Definition at line 468 of file FieldTypes.h.

References fromTm(), and FIX::time_gmtime().

Referenced by nowUtc().

469  {
470  struct tm tm = time_gmtime( &t );
471  return fromTm( tm, millis );
472  }
tm time_gmtime(const time_t *t)
Definition: Utility.cpp:384
static DateTime fromTm(const tm &tm, int millis=0)
Convert a tm and optional milliseconds to a DateTime.
Definition: FieldTypes.h:494

◆ fromUtcTimeT() [2/2]

static DateTime FIX::DateTime::fromUtcTimeT ( time_t  t,
int  fraction,
int  precision 
)
inlinestatic

Definition at line 480 of file FieldTypes.h.

References fromTm(), and FIX::time_gmtime().

481  {
482  struct tm tm = time_gmtime( &t );
483  return fromTm( tm, fraction, precision );
484  }
tm time_gmtime(const time_t *t)
Definition: Utility.cpp:384
static DateTime fromTm(const tm &tm, int millis=0)
Convert a tm and optional milliseconds to a DateTime.
Definition: FieldTypes.h:494

◆ getDate()

int FIX::DateTime::getDate ( ) const
inline

Another name for the day of the month.

Bad name, but used because of the legacy UtcTimeStamp interface

Definition at line 130 of file FieldTypes.h.

References getDay().

130 { return getDay(); }
int getDay() const
Return the day of the month portion of the date.
Definition: FieldTypes.h:121

◆ getDay()

int FIX::DateTime::getDay ( ) const
inline

Return the day of the month portion of the date.

Definition at line 121 of file FieldTypes.h.

References getYMD().

Referenced by getDate().

122  {
123  int y, m, d;
124  getYMD( y, m, d );
125  return d;
126  }
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getFraction()

int FIX::DateTime::getFraction ( int  precision) const
inline

Return the fraction portion of the time.

Definition at line 172 of file FieldTypes.h.

References getNanosecond().

Referenced by getHMS().

173  {
174  switch (precision)
175  {
176  case 0:
177  return (getNanosecond() / PRECISION_FACTOR[0]);
178 
179  case 1:
180  return (getNanosecond() / PRECISION_FACTOR[1]);
181 
182  case 2:
183  return (getNanosecond() / PRECISION_FACTOR[2]);
184 
185  case 3:
186  return (getNanosecond() / PRECISION_FACTOR[3]);
187 
188  case 4:
189  return (getNanosecond() / PRECISION_FACTOR[4]);
190 
191  case 5:
192  return (getNanosecond() / PRECISION_FACTOR[5]);
193 
194  case 6:
195  return (getNanosecond() / PRECISION_FACTOR[6]);
196 
197  case 7:
198  return (getNanosecond() / PRECISION_FACTOR[7]);
199 
200  case 8:
201  return (getNanosecond() / PRECISION_FACTOR[8]);
202 
203  case 9:
204  default:
205  return (getNanosecond() / PRECISION_FACTOR[9]);
206  }
207  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
unsigned int getNanosecond() const
Return the nanosecond portion of the time.
Definition: FieldTypes.h:166

◆ getHMS() [1/2]

void FIX::DateTime::getHMS ( int &  hour,
int &  minute,
int &  second,
int &  millis 
) const
inline

Load the referenced values with the hour, minute, second and millisecond portions of the time in a single operation.

Definition at line 218 of file FieldTypes.h.

References getMillisecond(), SECONDS_PER_HOUR, and SECONDS_PER_MIN.

Referenced by FIX::UtcTimeStampConvertor::convert(), FIX::UtcTimeOnlyConvertor::convert(), getTmUtc(), setFraction(), setHour(), setMicrosecond(), setMillisecond(), setMinute(), setNanosecond(), and setSecond().

219  {
220  int ticks = (int)(m_time / NANOS_PER_SEC);
221  hour = ticks / SECONDS_PER_HOUR;
222  minute = (ticks / SECONDS_PER_MIN) % MINUTES_PER_HOUR;
223  second = ticks % SECONDS_PER_MIN;
224  millis = getMillisecond();
225  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
static const int64_t MINUTES_PER_HOUR
Definition: FieldTypes.h:69
int64_t m_time
Definition: FieldTypes.h:63
int getMillisecond() const
Return the millisecond portion of the time (0-999)
Definition: FieldTypes.h:154
static const int64_t SECONDS_PER_HOUR
Definition: FieldTypes.h:67
static const int64_t SECONDS_PER_MIN
Definition: FieldTypes.h:68

◆ getHMS() [2/2]

void FIX::DateTime::getHMS ( int &  hour,
int &  minute,
int &  second,
int &  fraction,
int  precision 
) const
inline

Load the referenced values with the hour, minute, second and fraction portions of the time in a single operation.

Definition at line 229 of file FieldTypes.h.

References getFraction(), SECONDS_PER_HOUR, and SECONDS_PER_MIN.

230  {
231  int ticks = (int)(m_time / NANOS_PER_SEC);
232  hour = ticks / SECONDS_PER_HOUR;
233  minute = (ticks / SECONDS_PER_MIN) % MINUTES_PER_HOUR;
234  second = ticks % SECONDS_PER_MIN;
235  fraction = getFraction(precision);
236  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
static const int64_t MINUTES_PER_HOUR
Definition: FieldTypes.h:69
int getFraction(int precision) const
Return the fraction portion of the time.
Definition: FieldTypes.h:172
int64_t m_time
Definition: FieldTypes.h:63
static const int64_t SECONDS_PER_HOUR
Definition: FieldTypes.h:67
static const int64_t SECONDS_PER_MIN
Definition: FieldTypes.h:68

◆ getHour()

int FIX::DateTime::getHour ( ) const
inline

Return the hour portion of the time (0-23)

Definition at line 136 of file FieldTypes.h.

References NANOS_PER_HOUR.

Referenced by FIX::SessionFactory::create().

137  {
138  return (int)(m_time / NANOS_PER_HOUR);
139  }
static const int64_t NANOS_PER_HOUR
Definition: FieldTypes.h:72
int64_t m_time
Definition: FieldTypes.h:63

◆ getJulianDate()

int FIX::DateTime::getJulianDate ( ) const
inline

Return the internal julian date.

Definition at line 133 of file FieldTypes.h.

References m_date.

Referenced by FIX::TimeRange::isInSameRange().

133 { return m_date; }

◆ getMicroecond()

int FIX::DateTime::getMicroecond ( ) const
inline

Return the microsecond portion of the time.

Definition at line 160 of file FieldTypes.h.

References getNanosecond().

161  {
162  return (getNanosecond() / PRECISION_FACTOR[6]);
163  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
unsigned int getNanosecond() const
Return the nanosecond portion of the time.
Definition: FieldTypes.h:166

◆ getMillisecond()

int FIX::DateTime::getMillisecond ( ) const
inline

Return the millisecond portion of the time (0-999)

Definition at line 154 of file FieldTypes.h.

References getNanosecond().

Referenced by getHMS().

155  {
156  return (getNanosecond() / PRECISION_FACTOR[3]);
157  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
unsigned int getNanosecond() const
Return the nanosecond portion of the time.
Definition: FieldTypes.h:166

◆ getMinute()

int FIX::DateTime::getMinute ( ) const
inline

Return the minute portion of the time (0-59)

Definition at line 142 of file FieldTypes.h.

References MINUTES_PER_HOUR.

Referenced by FIX::SessionFactory::create().

143  {
145  }
static const int64_t MINUTES_PER_HOUR
Definition: FieldTypes.h:69
static const int64_t NANOS_PER_MIN
Definition: FieldTypes.h:73
int64_t m_time
Definition: FieldTypes.h:63

◆ getMonth()

int FIX::DateTime::getMonth ( ) const
inline

Return the month (1-12) portion of the date.

Definition at line 113 of file FieldTypes.h.

References getYMD().

114  {
115  int y, m, d;
116  getYMD( y, m, d );
117  return m;
118  }
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getNanosecond()

unsigned int FIX::DateTime::getNanosecond ( ) const
inline

Return the nanosecond portion of the time.

Definition at line 166 of file FieldTypes.h.

References m_time.

Referenced by getFraction(), getMicroecond(), and getMillisecond().

167  {
168  return static_cast<uint64_t>(m_time) % NANOS_PER_SEC;
169  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
unsigned __int64 uint64_t
Definition: stdint_msvc.h:91
int64_t m_time
Definition: FieldTypes.h:63

◆ getSecond()

int FIX::DateTime::getSecond ( ) const
inline

Return the second portion of the time (0-59)

Definition at line 148 of file FieldTypes.h.

References SECONDS_PER_MIN.

Referenced by FIX::SessionFactory::create().

149  {
150  return (m_time / NANOS_PER_SEC) % SECONDS_PER_MIN;
151  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
int64_t m_time
Definition: FieldTypes.h:63
static const int64_t SECONDS_PER_MIN
Definition: FieldTypes.h:68

◆ getTimeT()

time_t FIX::DateTime::getTimeT ( ) const
inline

Convert the DateTime to a time_t.

Note that this operation can overflow on 32-bit platforms when we go beyond year 2038.

Definition at line 254 of file FieldTypes.h.

Referenced by FIX::TimeRange::isInRange(), and FIX::TimeRange::isInSameRange().

255  {
256  return (SECONDS_PER_DAY * (m_date - JULIAN_19700101) +
258  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
int64_t m_time
Definition: FieldTypes.h:63
static const int64_t JULIAN_19700101
Definition: FieldTypes.h:77
static const int64_t SECONDS_PER_DAY
Magic numbers.
Definition: FieldTypes.h:66

◆ getTmUtc()

tm FIX::DateTime::getTmUtc ( ) const
inline

Convert the DateTime to a struct tm which is in UTC.

Definition at line 261 of file FieldTypes.h.

References getHMS(), and getYMD().

262  {
263  int year, month, day;
264  int hour, minute, second, millis;
265  tm result = { 0 };
266 
267  getYMD( year, month, day );
268  getHMS( hour, minute, second, millis );
269 
270  result.tm_year = year - 1900;
271  result.tm_mon = month - 1;
272  result.tm_mday = day;
273  result.tm_hour = hour;
274  result.tm_min = minute;
275  result.tm_sec = second;
276  result.tm_isdst = -1;
277 
278  return result;
279  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getWeekDay()

int FIX::DateTime::getWeekDay ( ) const
inline

Calculate the weekday of the date (Sunday is 1, Saturday is 7)

Definition at line 239 of file FieldTypes.h.

References getYMD().

Referenced by FIX::TimeRange::isInRange(), and FIX::TimeRange::isInSameRange().

240  {
241  int Y, M, D;
242  getYMD (Y, M, D);
243  int m = M >= 3 ? M - 2 : M + 10;
244  int Yprime = M >= 3 ? Y : Y - 1;
245  int y = Yprime % 100;
246  int c = Yprime / 100;
247  int wd = (D + int (2.6 * m - 0.2) + y + int (y / 4) + int (c / 4) -
248  (2 * c)) % 7;
249  return 1 + (wd < 0 ? 7 + wd : wd);
250  }
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getYear()

int FIX::DateTime::getYear ( ) const
inline

Return the year portion of the date.

Definition at line 105 of file FieldTypes.h.

References getYMD().

106  {
107  int y, m, d;
108  getYMD( y, m, d );
109  return y;
110  }
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getYMD() [1/2]

void FIX::DateTime::getYMD ( int &  year,
int &  month,
int &  day 
) const
inline

Load the referenced values with the year, month and day portions of the date in a single operation.

Definition at line 211 of file FieldTypes.h.

Referenced by FIX::UtcTimeStampConvertor::convert(), getDay(), getMonth(), getTmUtc(), getWeekDay(), and getYear().

212  {
213  getYMD( m_date, year, month, day );
214  }
void getYMD(int &year, int &month, int &day) const
Load the referenced values with the year, month and day portions of the date in a single operation...
Definition: FieldTypes.h:211

◆ getYMD() [2/2]

static void FIX::DateTime::getYMD ( int  jday,
int &  year,
int &  month,
int &  day 
)
inlinestatic

Convert a Julian day number to a year, month and day.

Definition at line 522 of file FieldTypes.h.

523  {
524  int a = jday + 32044;
525  int b = (4 * a + 3) / 146097;
526  int c = a - int ((b * 146097) / 4);
527  int d = (4 * c + 3) / 1461;
528  int e = c - int ((1461 * d) / 4);
529  int m = (5 * e + 2) / 153;
530  day = e - int ((153 * m + 2) / 5) + 1;
531  month = m + 3 - 12 * int (m / 10);
532  year = b * 100 + d - 4800 + int (m / 10);
533  }

◆ julianDate()

static int FIX::DateTime::julianDate ( int  year,
int  month,
int  day 
)
inlinestatic

Helper method to calculate a Julian day number.

Definition at line 512 of file FieldTypes.h.

Referenced by DateTime(), fromTm(), and setYMD().

513  {
514  int a = (14 - month) / 12;
515  int y = year + 4800 - a;
516  int m = month + 12 * a - 3;
517  return (day + int ((153 * m + 2) / 5) + y * 365 +
518  int (y / 4) - int (y / 100) + int (y / 400) - 32045);
519  }

◆ makeHMS()

static int64_t FIX::DateTime::makeHMS ( int  hour,
int  minute,
int  second,
int  nanos 
)
inlinestatic

Helper method to convert a broken down time to a number of nanoseconds since midnight.

Definition at line 454 of file FieldTypes.h.

References nowLocal(), and nowUtc().

Referenced by DateTime(), fromTm(), and setHMS().

455  {
456  return NANOS_PER_SEC * (SECONDS_PER_HOUR * hour +
457  SECONDS_PER_MIN * minute +
458  second) + nanos;
459  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
static const int64_t SECONDS_PER_HOUR
Definition: FieldTypes.h:67
static const int64_t SECONDS_PER_MIN
Definition: FieldTypes.h:68

◆ nowLocal()

DateTime FIX::DateTime::nowLocal ( )
static

Return the current wall-clock time as a local DateTime.

Definition at line 49 of file FieldTypes.cpp.

References fromLocalTimeT().

Referenced by makeHMS(), FIX::LocalTimeStamp::setCurrent(), FIX::LocalTimeOnly::setCurrent(), and FIX::LocalDate::setCurrent().

50 {
51 #if defined( _POSIX_SOURCE ) || defined(HAVE_GETTIMEOFDAY)
52  struct timeval tv;
53  gettimeofday (&tv, 0);
54  return fromLocalTimeT( tv.tv_sec, tv.tv_usec, 6 );
55 #elif defined( HAVE_FTIME )
56  timeb tb;
57  ftime (&tb);
58  return fromLocalTimeT( tb.time, tb.millitm );
59 #else
60  return fromLocalTimeT( ::time (0), 0 );
61 #endif
62 }
static DateTime fromLocalTimeT(time_t t, int millis=0)
Definition: FieldTypes.h:474

◆ nowUtc()

DateTime FIX::DateTime::nowUtc ( )
static

Return the current wall-clock time as a utc DateTime.

Definition at line 34 of file FieldTypes.cpp.

References fromUtcTimeT().

Referenced by makeHMS(), FIX::UtcTimeStamp::setCurrent(), FIX::UtcTimeOnly::setCurrent(), and FIX::UtcDate::setCurrent().

35 {
36 #if defined( _POSIX_SOURCE ) || defined(HAVE_GETTIMEOFDAY)
37  struct timeval tv;
38  gettimeofday (&tv, 0);
39  return fromUtcTimeT( tv.tv_sec, tv.tv_usec, 6 );
40 #elif defined( HAVE_FTIME )
41  timeb tb;
42  ftime (&tb);
43  return fromUtcTimeT (tb.time, tb.millitm);
44 #else
45  return fromUtcTimeT( ::time (0), 0 );
46 #endif
47 }
static DateTime fromUtcTimeT(time_t t, int millis=0)
Convert a time_t and optional milliseconds to a DateTime.
Definition: FieldTypes.h:468

◆ operator+=()

void FIX::DateTime::operator+= ( int  seconds)
inline

Add a number of seconds to this.

Definition at line 380 of file FieldTypes.h.

References NANOS_PER_DAY, NANOS_PER_SEC, and SECONDS_PER_DAY.

381  {
382  int d = seconds / SECONDS_PER_DAY;
383  int s = seconds % SECONDS_PER_DAY;
384 
385  m_date += d;
386  m_time += s * NANOS_PER_SEC;
387 
388  if( m_time > NANOS_PER_DAY )
389  {
390  m_date++;
392  }
393  else if( m_time < 0 )
394  {
395  m_date--;
397  }
398  }
static const int64_t NANOS_PER_SEC
Definition: FieldTypes.h:74
static const int64_t NANOS_PER_DAY
Definition: FieldTypes.h:71
int64_t m_time
Definition: FieldTypes.h:63
static const int64_t SECONDS_PER_DAY
Magic numbers.
Definition: FieldTypes.h:66

◆ set() [1/2]

void FIX::DateTime::set ( int  date,
int64_t  time 
)
inline

Set the internal date and time members.

Definition at line 370 of file FieldTypes.h.

370 { m_date = date; m_time = time; }
int64_t m_time
Definition: FieldTypes.h:63

◆ set() [2/2]

void FIX::DateTime::set ( const DateTime other)
inline

Initialize from another DateTime.

Definition at line 373 of file FieldTypes.h.

374  {
375  m_date = other.m_date;
376  m_time = other.m_time;
377  }
int64_t m_time
Definition: FieldTypes.h:63

◆ setFraction()

void FIX::DateTime::setFraction ( int  fraction,
int  precision 
)
inline

Set the fraction portion of the time.

Definition at line 350 of file FieldTypes.h.

References getHMS(), and setHMS().

351  {
352  int hour, min, sec, old_nanos;
353  getHMS( hour, min, sec, old_nanos, 9 );
354  setHMS( hour, min, sec, fraction, precision );
355  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setHMS() [1/2]

void FIX::DateTime::setHMS ( int  hour,
int  minute,
int  second,
int  millis 
)
inline

Set the time portion of the DateTime.

Definition at line 288 of file FieldTypes.h.

References makeHMS().

Referenced by FIX::LocalTimeOnly::LocalTimeOnly(), FIX::LocalTimeStamp::LocalTimeStamp(), setFraction(), setHour(), setMicrosecond(), setMillisecond(), setMinute(), setNanosecond(), setSecond(), FIX::UtcTimeOnly::UtcTimeOnly(), and FIX::UtcTimeStamp::UtcTimeStamp().

289  {
290  m_time = makeHMS( hour, minute, second, millis * PRECISION_FACTOR[3] );
291  }
static const int PRECISION_FACTOR[10]
Date and Time stored as a Julian day number and number of nanoseconds since midnight.
Definition: FieldTypes.h:58
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
int64_t m_time
Definition: FieldTypes.h:63

◆ setHMS() [2/2]

void FIX::DateTime::setHMS ( int  hour,
int  minute,
int  second,
int  fraction,
int  precision 
)
inline

Set the time portion of the DateTime.

Definition at line 294 of file FieldTypes.h.

References convertToNanos(), and makeHMS().

295  {
296  int nanos = convertToNanos(fraction, precision);
297 
298  m_time = makeHMS( hour, minute, second, nanos);
299  }
static int convertToNanos(int fraction, int precision)
Convert to internal nanos.
Definition: FieldTypes.h:401
static int64_t makeHMS(int hour, int minute, int second, int nanos)
Helper method to convert a broken down time to a number of nanoseconds since midnight.
Definition: FieldTypes.h:454
int64_t m_time
Definition: FieldTypes.h:63

◆ setHour()

void FIX::DateTime::setHour ( int  hour)
inline

Set the hour portion of the time.

Definition at line 302 of file FieldTypes.h.

References getHMS(), and setHMS().

303  {
304  int old_hour, min, sec, millis;
305  getHMS( old_hour, min, sec, millis );
306  setHMS( hour, min, sec, millis );
307  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setMicrosecond()

void FIX::DateTime::setMicrosecond ( int  micros)
inline

Set the microsecond portion of the time.

Definition at line 334 of file FieldTypes.h.

References getHMS(), and setHMS().

335  {
336  int hour, min, sec, old_nanos;
337  getHMS( hour, min, sec, old_nanos, 9 );
338  setHMS( hour, min, sec, micros, 6 );
339  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setMillisecond()

void FIX::DateTime::setMillisecond ( int  millis)
inline

Set the millisecond portion of the time.

Definition at line 326 of file FieldTypes.h.

References getHMS(), and setHMS().

327  {
328  int hour, min, sec, old_millis;
329  getHMS( hour, min, sec, old_millis );
330  setHMS( hour, min, sec, millis );
331  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setMinute()

void FIX::DateTime::setMinute ( int  min)
inline

Set the minute portion of the time.

Definition at line 310 of file FieldTypes.h.

References getHMS(), and setHMS().

311  {
312  int hour, old_min, sec, millis;
313  getHMS( hour, old_min, sec, millis );
314  setHMS( hour, min, sec, millis );
315  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setNanosecond()

void FIX::DateTime::setNanosecond ( int  nanos)
inline

Set the nanosecond portion of the time.

Definition at line 342 of file FieldTypes.h.

References getHMS(), and setHMS().

343  {
344  int hour, min, sec, old_nanos;
345  getHMS( hour, min, sec, old_nanos, 9 );
346  setHMS( hour, min, sec, nanos, 9 );
347  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setSecond()

void FIX::DateTime::setSecond ( int  sec)
inline

Set the seconds portion of the time.

Definition at line 318 of file FieldTypes.h.

References getHMS(), and setHMS().

319  {
320  int hour, min, old_sec, millis;
321  getHMS( hour, min, old_sec, millis );
322  setHMS( hour, min, sec, millis );
323  }
void getHMS(int &hour, int &minute, int &second, int &millis) const
Load the referenced values with the hour, minute, second and millisecond portions of the time in a si...
Definition: FieldTypes.h:218
void setHMS(int hour, int minute, int second, int millis)
Set the time portion of the DateTime.
Definition: FieldTypes.h:288

◆ setYMD()

void FIX::DateTime::setYMD ( int  year,
int  month,
int  day 
)
inline

Set the date portion of the DateTime.

Definition at line 282 of file FieldTypes.h.

References julianDate().

283  {
284  m_date = julianDate( year, month, day );
285  }
static int julianDate(int year, int month, int day)
Helper method to calculate a Julian day number.
Definition: FieldTypes.h:512

Member Data Documentation

◆ JULIAN_19700101

const int64_t FIX::DateTime::JULIAN_19700101 = 2440588
static

Definition at line 77 of file FieldTypes.h.

◆ m_date

int FIX::DateTime::m_date

◆ m_time

int64_t FIX::DateTime::m_time

◆ MINUTES_PER_HOUR

const int64_t FIX::DateTime::MINUTES_PER_HOUR = 60
static

Definition at line 69 of file FieldTypes.h.

Referenced by getMinute().

◆ NANOS_PER_DAY

const int64_t FIX::DateTime::NANOS_PER_DAY = 86400000000000
static

Definition at line 71 of file FieldTypes.h.

Referenced by operator+=().

◆ NANOS_PER_HOUR

const int64_t FIX::DateTime::NANOS_PER_HOUR = 3600000000000
static

Definition at line 72 of file FieldTypes.h.

Referenced by getHour().

◆ NANOS_PER_MIN

const int64_t FIX::DateTime::NANOS_PER_MIN = 60000000000
static

Definition at line 73 of file FieldTypes.h.

◆ NANOS_PER_SEC

const int64_t FIX::DateTime::NANOS_PER_SEC = 1000000000
static

Definition at line 74 of file FieldTypes.h.

Referenced by operator+=(), and FIX::operator-().

◆ SECONDS_PER_DAY

const int64_t FIX::DateTime::SECONDS_PER_DAY = 86400
static

Magic numbers.

Definition at line 66 of file FieldTypes.h.

Referenced by FIX::TimeRange::isInSameRange(), operator+=(), and FIX::operator-().

◆ SECONDS_PER_HOUR

const int64_t FIX::DateTime::SECONDS_PER_HOUR = 3600
static

Definition at line 67 of file FieldTypes.h.

Referenced by getHMS().

◆ SECONDS_PER_MIN

const int64_t FIX::DateTime::SECONDS_PER_MIN = 60
static

Definition at line 68 of file FieldTypes.h.

Referenced by getHMS(), and getSecond().


The documentation for this struct was generated from the following files:

Generated on Wed Aug 28 2019 14:13:46 for QuickFIX by doxygen 1.8.13 written by Dimitri van Heesch, © 1997-2001