Time Shield Library
C++ library for working with time
Loading...
Searching...
No Matches
ole_automation_conversions.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2#pragma once
3#ifndef _TIME_SHIELD_OLE_AUTOMATION_CONVERSIONS_HPP_INCLUDED
4#define _TIME_SHIELD_OLE_AUTOMATION_CONVERSIONS_HPP_INCLUDED
5
19
20#include "config.hpp"
21#include "types.hpp"
22#include "constants.hpp"
23#include "time_conversions.hpp"
24
25namespace time_shield {
26
30 TIME_SHIELD_CONSTEXPR inline oadate_t ts_to_oadate(ts_t ts) noexcept {
31 return static_cast<oadate_t>(OLE_EPOCH)
32 + static_cast<oadate_t>(ts) / static_cast<oadate_t>(SEC_PER_DAY);
33 }
34
38 TIME_SHIELD_CONSTEXPR inline oadate_t fts_to_oadate(fts_t ts) noexcept {
39 return static_cast<oadate_t>(OLE_EPOCH)
40 + static_cast<oadate_t>(ts) / static_cast<oadate_t>(SEC_PER_DAY);
41 }
42
46 TIME_SHIELD_CONSTEXPR inline oadate_t ts_ms_to_oadate(ts_ms_t ts_ms) noexcept {
47 return static_cast<oadate_t>(OLE_EPOCH)
48 + static_cast<oadate_t>(ts_ms) / static_cast<oadate_t>(MS_PER_DAY);
49 }
50
54 TIME_SHIELD_CONSTEXPR inline ts_t oadate_to_ts(oadate_t oa) noexcept {
55 const oadate_t seconds = (oa - static_cast<oadate_t>(OLE_EPOCH))
56 * static_cast<oadate_t>(SEC_PER_DAY);
57 return static_cast<ts_t>(seconds);
58 }
59
63 TIME_SHIELD_CONSTEXPR inline fts_t oadate_to_fts(oadate_t oa) noexcept {
64 return static_cast<fts_t>((oa - static_cast<oadate_t>(OLE_EPOCH))
65 * static_cast<oadate_t>(SEC_PER_DAY));
66 }
67
71 TIME_SHIELD_CONSTEXPR inline ts_ms_t oadate_to_ts_ms(oadate_t oa) noexcept {
72 const oadate_t ms = (oa - static_cast<oadate_t>(OLE_EPOCH))
73 * static_cast<oadate_t>(MS_PER_DAY);
74 return static_cast<ts_ms_t>(ms);
75 }
76
82 template<class T1, class T2, class T3>
83 TIME_SHIELD_CONSTEXPR inline oadate_t to_oadate(
84 T1 year, T2 month, T2 day,
85 T2 hour = 0, T2 min = 0, T2 sec = 0, T3 ms = 0) noexcept {
86 // Use existing conversion to floating timestamp (seconds).
87 const fts_t fts = to_ftimestamp(year, month, day, hour, min, sec, ms);
88 return fts_to_oadate(fts);
89 }
90
91} // namespace time_shield
92
93#endif // _TIME_SHIELD_OLE_AUTOMATION_CONVERSIONS_HPP_INCLUDED
Configuration macros for the library.
Header file with time-related constants.
constexpr int64_t OLE_EPOCH
OLE automation date since UNIX epoch.
constexpr int64_t MS_PER_DAY
Milliseconds per day.
Definition constants.hpp:97
constexpr int64_t SEC_PER_DAY
Seconds per day.
TIME_SHIELD_CONSTEXPR ts_t ts(year_t year, int month, int day)
Alias for to_timestamp.
TIME_SHIELD_CONSTEXPR ts_ms_t ts_ms(year_t year, int month, int day)
Alias for to_timestamp_ms.
constexpr fts_t fts(T1 year, T2 month, T2 day, T2 hour=0, T2 min=0, T2 sec=0, T3 ms=0)
Alias for to_ftimestamp.
TIME_SHIELD_CONSTEXPR T year(ts_t ts=time_shield::ts())
Alias for year_of function.
TIME_SHIELD_CONSTEXPR fts_t to_ftimestamp(T1 year, T2 month, T2 day, T2 hour=0, T2 min=0, T2 sec=0, T3 ms=0)
Converts a date and time to a floating-point timestamp.
int64_t ts_t
Unix timestamp in seconds since 1970‑01‑01T00:00:00Z.
Definition types.hpp:48
int64_t ts_ms_t
Unix timestamp in milliseconds since epoch.
Definition types.hpp:49
double fts_t
Floating-point timestamp (fractional seconds since epoch).
Definition types.hpp:51
double oadate_t
OLE Automation date (days since 1899‑12‑30, as double).
Definition types.hpp:54
Main namespace for the Time Shield library.
TIME_SHIELD_CONSTEXPR oadate_t ts_ms_to_oadate(ts_ms_t ts_ms) noexcept
Convert Unix timestamp (milliseconds) to OA date.
TIME_SHIELD_CONSTEXPR oadate_t ts_to_oadate(ts_t ts) noexcept
Convert Unix timestamp (seconds) to OA date.
TIME_SHIELD_CONSTEXPR ts_t oadate_to_ts(oadate_t oa) noexcept
Convert OA date to Unix timestamp (seconds).
TIME_SHIELD_CONSTEXPR oadate_t to_oadate(T1 year, T2 month, T2 day, T2 hour=0, T2 min=0, T2 sec=0, T3 ms=0) noexcept
Build OA date from calendar components (Gregorian).
TIME_SHIELD_CONSTEXPR fts_t oadate_to_fts(oadate_t oa) noexcept
Convert OA date to Unix timestamp (floating seconds).
TIME_SHIELD_CONSTEXPR ts_ms_t oadate_to_ts_ms(oadate_t oa) noexcept
Convert OA date to Unix timestamp (milliseconds).
TIME_SHIELD_CONSTEXPR oadate_t fts_to_oadate(fts_t ts) noexcept
Convert Unix timestamp (floating seconds) to OA date.
Umbrella header for time conversion functions.
Type definitions for time-related units and formats.