lsst.daf.base
19.0.0-4-g66397f0+3
include
lsst
daf
base
DateTime.h
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 2008, 2009, 2010 LSST Corporation.
6
*
7
* This product includes software developed by the
8
* LSST Project (http://www.lsst.org/).
9
*
10
* This program is free software: you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation, either version 3 of the License, or
13
* (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the LSST License Statement and
21
* the GNU General Public License along with this program. If not,
22
* see <http://www.lsstcorp.org/LegalNotices/>.
23
*/
24
25
#ifndef LSST_DAF_BASE_DATETIME_H
26
#define LSST_DAF_BASE_DATETIME_H
27
44
#include <cstdint>
45
#include <ctime>
46
#include <limits>
47
#include <sys/time.h>
48
#include <string>
49
50
#include "
lsst/base.h
"
51
#include "
lsst/pex/exceptions.h
"
52
53
// Forward declaration of the boost::serialization::access class.
54
namespace
boost
{
55
namespace
serialization {
56
class
access;
57
}
58
}
// namespace boost
59
60
namespace
lsst
{
61
namespace
daf {
62
namespace
base {
63
64
class
LSST_EXPORT
DateTime
{
65
public
:
66
enum
DateSystem
{ JD = 0,
MJD
, EPOCH };
67
enum
Timescale
{
68
TAI = 5,
69
UTC
,
70
TT
71
};
// use values that do not overlap DateSystem
72
// to avoid confusing one for the other in Python
73
// an invalid DateTime has _nsec == invalid_nsecs
74
constexpr
static
long
long
invalid_nsecs =
std::numeric_limits<std::int64_t>::min
();
75
79
explicit
DateTime
();
80
90
explicit
DateTime
(
long
long
nsecs,
Timescale
scale = TAI);
91
100
explicit
DateTime
(
double
date,
DateSystem
system = MJD,
Timescale
scale = TAI);
101
115
DateTime
(
int
year,
int
month,
int
day,
int
hr,
int
min,
int
sec,
Timescale
scale = TAI);
116
133
explicit
DateTime
(
std::string
const
& iso8601,
Timescale
scale);
134
145
long
long
nsecs(
Timescale
scale = TAI)
const
;
146
156
double
get(
DateSystem
system = MJD,
Timescale
scale = TAI)
const
;
157
168
std::string
toString(
Timescale
scale)
const
;
169
177
struct
tm gmtime(
Timescale
scale) const;
178
187
struct
timespec timespec(
Timescale
scale) const;
188
197
struct
timeval timeval(
Timescale
scale) const;
198
202
bool
isValid
()
const
{
return
_nsecs !=
DateTime::invalid_nsecs
; };
203
204
bool
operator==(
DateTime
const
& rhs)
const
;
205
207
std::size_t
hash_value() const noexcept;
208
213
static
DateTime
now(
void
);
214
223
static
void
initializeLeapSeconds(
std
::
string
const& leapString);
224
225
private:
226
long
long
_nsecs;
227
229
void
_assertValid()
const
{
230
if
(!isValid()) {
231
throw
LSST_EXCEPT
(
pex::exceptions::RuntimeError
,
"DateTime not valid"
);
232
}
233
}
234
242
double
_getMjd(Timescale scale)
const
;
243
251
double
_getJd(Timescale scale)
const
;
252
260
double
_getEpoch(Timescale scale)
const
;
261
269
void
setNsecsFromMjd(
double
mjd, Timescale scale);
270
278
void
setNsecsFromJd(
double
jd, Timescale scale);
279
287
void
setNsecsFromEpoch(
double
epoch, Timescale scale);
288
289
friend
class
boost::serialization::access;
290
297
template
<
class
Archive>
298
void
serialize(Archive ar,
int
const
version) {
299
ar& _nsecs;
300
}
301
};
302
303
}
// namespace base
304
}
// namespace daf
305
}
// namespace lsst
306
307
namespace
std
{
308
template
<>
309
struct
hash
<
lsst
::daf::base::DateTime> {
310
using
argument_type
=
lsst::daf::base::DateTime
;
311
using
result_type
=
size_t
;
312
size_t
operator()
(
argument_type
const
& obj)
const
noexcept {
return
obj.hash_value(); }
313
};
314
}
// namespace std
315
316
#endif
lsst::daf::base::DateTime::isValid
bool isValid() const
Is this date valid?
Definition:
DateTime.h:202
std::string
STL class.
LSST_EXPORT
#define LSST_EXPORT
std::hash< lsst::daf::base::DateTime >::operator()
size_t operator()(argument_type const &obj) const noexcept
Definition:
DateTime.h:312
boost
Definition:
DateTime.h:54
lsst::daf::base::DateTime
Class for handling dates/times, including MJD, UTC, and TAI.
Definition:
DateTime.h:64
base.h
lsst::daf::base::DateTime::invalid_nsecs
constexpr static long long invalid_nsecs
Definition:
DateTime.h:74
lsst::daf::base::DateTime::MJD
@ MJD
Definition:
DateTime.h:66
lsst
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
exceptions.h
std::numeric_limits::min
T min(T... args)
lsst::daf::base::DateTime::DateSystem
DateSystem
Definition:
DateTime.h:66
lsst::daf::base::DateTime::UTC
@ UTC
Definition:
DateTime.h:69
std
STL namespace.
std::size_t
lsst::daf::base::DateTime::Timescale
Timescale
Definition:
DateTime.h:67
lsst::pex::exceptions::RuntimeError
std::hash
Generated on Wed Jun 10 2020 08:50:46 for lsst.daf.base by
1.8.18