casacore
|
Class to handle date/time type conversions and I/O. More...
#include <MVTime.h>
Classes | |
class | Format |
Format structure. More... | |
Public Types | |
enum | formatTypes { ANGLE, TIME, CLEAN, NO_D, NO_DM, YMD, DMY, DAY, NO_TIME, MJD, DIG2, FITS, LOCAL, USE_SPACE, ALPHA, USE_Z, ISO, BOOST, NO_H, NO_HM, ANGLE_CLEAN, ANGLE_NO_D, ANGLE_NO_DM, ANGLE_CLEAN_NO_D, ANGLE_CLEAN_NO_DM, TIME_CLEAN, TIME_NO_H, TIME_NO_HM, TIME_CLEAN_NO_H, TIME_CLEAN_NO_HM, YMD_ONLY, MOD_MASK } |
Format types. More... | |
Public Member Functions | |
MVTime () | |
Default constructor: generate a zero value. More... | |
MVTime (const MVTime &other) | |
Copy constructor. More... | |
MVTime & | operator= (const MVTime &other) |
Copy assignment. More... | |
MVTime (Double d) | |
Constructor from Double (in MJD) More... | |
MVTime (const Quantity &other) | |
Constructor from Quantum : value can be an angle or time. More... | |
MVTime (const Time &other) | |
Constructor from Time. More... | |
MVTime (const MVEpoch &other) | |
Constructor from MVEpoch;. More... | |
MVTime (Int yy, Int mm, Double dd, Double d=0.0) | |
Constructor from yy, mm, dd, dd (all dd with fractions allowed) More... | |
~MVTime () | |
operator Double () const | |
Conversion operator. More... | |
Double | day () const |
Get value of date/time (MJD) in given units. More... | |
Double | hour () const |
Double | minute () const |
Double | second () const |
Quantity | get () const |
Quantity | get (const Unit &inunit) const |
Time | getTime () const |
const String & | dayName () const |
Get indicated part of the time/date. More... | |
const String & | monthName () const |
uInt | weekday () const |
Mon = 1; Sun = 7;. More... | |
uInt | month () const |
Jan =1. More... | |
uInt | monthday () const |
Int | year () const |
Int | ymd () const |
uInt | yearday () const |
uInt | yearweek () const |
String | string () const |
Output data. More... | |
String | string (MVTime::formatTypes intyp, uInt inprec=0) const |
String | string (uInt intyp, uInt inprec) const |
String | string (uInt inprec) const |
String | string (const MVTime::Format &form) const |
void | print (ostream &oss, const MVTime::Format &form) const |
Static Public Member Functions | |
static Bool | read (Quantity &res, const String &in, Bool chk=True) |
Make res time Quantity from string. More... | |
static Bool | read (Quantity &res, MUString &in, Bool chk=True) |
static Bool | read (Quantity &res, const String &in, Bool chk, Bool throwExcp) |
static Bool | read (Quantity &res, MUString &in, Bool chk, Bool throwExcp) |
static const String & | dayName (uInt which) |
static const String & | monthName (uInt which) |
static Format | setFormat (MVTime::formatTypes intyp, uInt inprec=0) |
Set default format Warning: It is thread-unsafe to print using the setFormat functions because they change a static class member; The only thred-safe way to print a time is to use the print function above; More... | |
static Format | setFormat (uInt intyp, uInt inprec) |
static Format | setFormat (uInt inprec=0) |
static Format | setFormat (const Format &form) |
static Format | getFormat () |
Get default format. More... | |
static MVTime::formatTypes | giveMe (const String &in) |
Get code belonging to string. More... | |
static Double | timeZone () |
Get time zone offset (in days) More... | |
Private Member Functions | |
void | ymd (Int &yyyy, Int &mm, Int &dd) const |
Get the y,m,d values. More... | |
Private Attributes | |
Double | val |
Value. More... | |
Static Private Attributes | |
static MVTime::Format | defaultFormat |
Default format. More... | |
static MVTime::Format | interimFormat |
Temporary format. More... | |
static Bool | interimSet |
Friends | |
ostream & | operator<< (ostream &os, const MVTime &meas) |
Output a date/time. More... | |
istream & | operator>> (istream &is, MVTime &meas) |
Input a date/time. More... | |
ostream & | operator<< (ostream &os, const MVTime::Format &form) |
Set a temporary format. More... | |
Class to handle date/time type conversions and I/O.
Public interface
An MVTime is a simple Double for date/time conversions and I/O. Its internal value is in MJD. For high precision the MVEpoch class should be used.
It can be constructed from a Double (in which case MJD are assumed), or from a Quantity (Quantum<Double>
). Quantities must be in either angle or time units, or from a MVEpoch
The OS/Time class can be used as both input and output. An MVTime(Time)
constructor exists, as well as a Time getTime()
.
Construction from year, month, day is also supported.
Caution: Dates before 16 Oct 1582 are considered to be Julian, rather than Gregorian
It has an automatic conversion to Double, so all standard mathematical operations can operate on it.
The class has a number of special functions to obtain data:
Double day()
will return value in days Double hour()
will return value in hours Double minute()
will return value in minutes Double second()
will return value in seconds Quantity get()
will return days Quantity get(Unit)
will return in specified units (angle(in which case it will be between -pi and +pi) or time) uInt weekday()
will return day of week (1=Mon, 7=Sun) uInt month()
will return month (1=Jan) Int year()
will return year uInt monthday()
will return day of the month uInt yearday()
will return day of year (Jan01 = 1) uInt yearweek()
will return week of year (week containing Jan04 = 1, week start on Monday). The week before the first week will be called 0, contrary to standard practice (week 53/52 of previous year). Int ymd()
will return yyyymmdd as a single number const String &dayName()
will return name of day (Sun, Mon, Tue, Wed, Thu, Fri, Sat) const String &monthName()
will retrun name of Month (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec) Output formatting is done with the <<
statement, with the following rules:
hh:mm:ss.tt
. The number of digits presented will be based on the precision attached to the current stream output can be formatted by using either the setFormat()
method for global angle format setting, or the output of MVTime::Format()
data for a once off change (see later). Formats have a first argument which determines the type (default, if not given, MVTime::TIME, other possibility MVTime::ANGLE (as +ddd.mm.ss.tt..), the second the number of digits wanted (default stream precision), with a value:
comparable for angle;
Tip: The added colons are to enable input checking of the format; Look at the 'clean' types to bypass them;
The MVTime::YMD
format implies TIME, and will precede the time with 'yyyy/mm/dd/' (or use MVTime::YMD_ONLY
to include NO_TIME
modifier).
The MVTime::DMY
format implies TIME, and will precede the time with 'dd-Mon-yyyy/'.
The MVTime::FITS
format implies TIME, and will precede the time with 'ccyy-mm-ddT'.
The MVTime::ISO
format implies FITS followed by a Z for the UTC time zone. It uses a space instead of T as separator. It also implies CLEAN. The BOOST
format implies DMY and USE_SPACE (space instead of slash between date and time).
The output format can be modified with modifiers (specify as MVTime::TIME | MVTime::MOD (or + MVTime::MOD)).
Caution: For overloading/casting problems with some compilers, the use of modifiers necessitates either the presence of a precision (i;e; (A|B, prec)
), or an explicit cast: ((MVTime::formatTypes)(A|B))
, or make use of the provided TIME[_CLEAN][_NO_H[M]]
and ANGLE[_CLEAN][_NO_D[M]]
;
The modifiers can be:
MVTime::CLEAN
to suppress leading or trailing periods (or colons for TIME). Note that he result can not be read automatically. MVTime::NO_H
(or NO_D
) to suppress the output of hours (or degrees): useful for offsets MVTime::NO_HM
(or NO_DM
), to suppress the degrees and minutes. MVTime::DAY
will precede the output with 'Day-' (e.g. Wed-). Space delimiter is used for USE_SPACE. MVTime::NO_TIME
will suppress printing of time. Output in formats like 20'
can be done via the standard Quantum output (e.g. stream << time.get("'")
).
<sign>hh:mm
). The default formatting can be overwritten by a MVTime::setFormat();
statement; which returns an MVTime::Format structure, that can be used in a subsequent one to reset to previous. The format set holds for all MVTime output on all streams.
Temporary formats (i.e. for one MVTime output only), can be set by outputting a format (i.e. stream << MVTime::Format() <<...
).
Caution: A setFormat() will also reset any lingering temporary format; A setFormat(getFormat()) will reset without changing; Problems could arise in parallel processors;
Input can be read if the values are in any of the above (non-clean) output formats.
For other formatting practice, the output can be written to a String with the string() member functions.
Note that using a temporary format is inherently thread-unsafe because the format is kept in a static variable. Another thread may overwrite the format just set. The only thread-safe way to format an MVTime is using a print
or string
that accepts a Format object.
Strings and input can be converted to an MVTime (or Quantity) by Bool read(Quantity &out, const String &in)
and istream >> MVTime &
. In the latter case the actual reading is done by the String read, which reads between white-spaces.
The following input formats (note no blanks allowed) are supported (+stands for an optional + or -; v for an unsigned integer; dv for a floating number. [] indicate optional values. Separating codes are case insensitive), numbers(like yyyy) can be of any length. The separator between date and time part can be a slash (as shown below), a hyphen, or one or more spaces.
The time can be expressed as described in MVAngle Examples of valid strings:
To be able to format date/time-like values in user-required ways.
Format types.
casacore::MVTime::MVTime | ( | ) |
Default constructor: generate a zero value.
casacore::MVTime::MVTime | ( | const MVTime & | other | ) |
Copy constructor.
casacore::MVTime::MVTime | ( | Double | d | ) |
Constructor from Double (in MJD)
casacore::MVTime::MVTime | ( | const Quantity & | other | ) |
Constructor from yy, mm, dd, dd (all dd with fractions allowed)
casacore::MVTime::~MVTime | ( | ) |
Double casacore::MVTime::day | ( | ) | const |
Get value of date/time (MJD) in given units.
const String& casacore::MVTime::dayName | ( | ) | const |
Get indicated part of the time/date.
Quantity casacore::MVTime::get | ( | ) | const |
|
static |
Get default format.
Time casacore::MVTime::getTime | ( | ) | const |
|
static |
Get code belonging to string.
0 if not known
Double casacore::MVTime::hour | ( | ) | const |
Double casacore::MVTime::minute | ( | ) | const |
uInt casacore::MVTime::month | ( | ) | const |
Jan =1.
uInt casacore::MVTime::monthday | ( | ) | const |
const String& casacore::MVTime::monthName | ( | ) | const |
casacore::MVTime::operator Double | ( | ) | const |
Conversion operator.
void casacore::MVTime::print | ( | ostream & | oss, |
const MVTime::Format & | form | ||
) | const |
Make res time Quantity from string.
The String version will accept a time/angle Quantity as well. It returns False in case of an error. chk=True means that the entire string should be consumed. throwExcp=True means that an exception is thrown in case of an error.
|
static |
|
static |
Double casacore::MVTime::second | ( | ) | const |
|
static |
Set default format
Warning: It is thread-unsafe to print using the setFormat functions because they change a static class member; The only thred-safe way to print a time is to use the print function above;
String casacore::MVTime::string | ( | ) | const |
Output data.
Warning: The first function below is thread-unsafe because it uses the result of the setFormat function which changes a static class member; The other functions are thread-safe because the format is directly given;
String casacore::MVTime::string | ( | MVTime::formatTypes | intyp, |
uInt | inprec = 0 |
||
) | const |
String casacore::MVTime::string | ( | const MVTime::Format & | form | ) | const |
|
static |
Get time zone offset (in days)
uInt casacore::MVTime::weekday | ( | ) | const |
Mon = 1; Sun = 7;.
Int casacore::MVTime::year | ( | ) | const |
uInt casacore::MVTime::yearday | ( | ) | const |
uInt casacore::MVTime::yearweek | ( | ) | const |
Int casacore::MVTime::ymd | ( | ) | const |
|
friend |
Output a date/time.
Output
|
friend |
Set a temporary format.
|
staticprivate |
|
staticprivate |