![]() |
OpenSWMM Engine
6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
|
OpenSWMM Engine — SWMM DateTime conversion utilities (C API). More...
#include "openswmm_engine_export.h"Go to the source code of this file.
Macros | |
| #define | SWMM_DATETIME_DATE_DELTA 693594 |
| Days from 0001-01-01 to 1899-12-30 (the SWMM DateTime epoch). | |
Functions | |
| SWMM_ENGINE_API int | swmm_datetime_encode_date (int year, int month, int day, double *out) |
| Encode a calendar date as a SWMM DateTime (date portion only). | |
| SWMM_ENGINE_API int | swmm_datetime_encode_time (int hour, int minute, int second, double *out) |
| Encode a wall-clock time as the fractional-day part of a SWMM DateTime. | |
| SWMM_ENGINE_API int | swmm_datetime_decode_date (double value, int *year, int *month, int *day) |
| Decode the date portion of a SWMM DateTime. | |
| SWMM_ENGINE_API int | swmm_datetime_decode_time (double value, int *hour, int *minute, int *second) |
| Decode the time-of-day portion of a SWMM DateTime. | |
| SWMM_ENGINE_API int | swmm_datetime_add_seconds (double value, double seconds, double *out) |
| Add a (possibly fractional) number of seconds to a SWMM DateTime. | |
| SWMM_ENGINE_API int | swmm_datetime_time_diff (double value1, double value2, long *out) |
| Compute the difference, in whole seconds, between two SWMM DateTimes. | |
OpenSWMM Engine — SWMM DateTime conversion utilities (C API).
SWMM's native DateTime is a double. The integer part is the number of days since 1899-12-30 (the OLE Automation / Delphi TDateTime epoch) and the fractional part is the time-of-day fraction (0.0 = midnight, 0.5 = noon). This is the same representation produced and consumed by every other date or time value crossing the C API boundary — for example swmm_options_get_start_date, swmm_get_current_time, swmm_output_get_period_time and the sim_time argument passed to engine callbacks.
This header exposes the encode/decode primitives used inside the engine so language bindings (Python, .NET, etc.) can convert losslessly between the SWMM DateTime double and their native calendar/time types without re-implementing the epoch arithmetic.
The functions are pure (no engine handle required) and numerically identical to the legacy datetime.c routines.
| #define SWMM_DATETIME_DATE_DELTA 693594 |
Days from 0001-01-01 to 1899-12-30 (the SWMM DateTime epoch).
Exposed so bindings can validate against the same reference value the engine uses internally. A SWMM DateTime of 0.0 corresponds to 1899-12-30T00:00:00.
| SWMM_ENGINE_API int swmm_datetime_add_seconds | ( | double | value, |
| double | seconds, | ||
| double * | out | ||
| ) |
Add a (possibly fractional) number of seconds to a SWMM DateTime.
| value | Input SWMM DateTime double. |
| seconds | Seconds to add (may be negative). |
| out | [out] Resulting SWMM DateTime double. |
out is NULL.datetime_addSeconds: decomposes the input to integer H:M:S, adds the offset, and recomposes — producing bit-identical results to a legacy SWMM run. | SWMM_ENGINE_API int swmm_datetime_decode_date | ( | double | value, |
| int * | year, | ||
| int * | month, | ||
| int * | day | ||
| ) |
Decode the date portion of a SWMM DateTime.
| value | SWMM DateTime double. |
| year | [out] Year (>= 0). May be NULL. |
| month | [out] Month (1..12). May be NULL. |
| day | [out] Day of month (1..31). May be NULL. |
| SWMM_ENGINE_API int swmm_datetime_decode_time | ( | double | value, |
| int * | hour, | ||
| int * | minute, | ||
| int * | second | ||
| ) |
Decode the time-of-day portion of a SWMM DateTime.
| value | SWMM DateTime double. |
| hour | [out] Hour (0..23). May be NULL. |
| minute | [out] Minute (0..59). May be NULL. |
| second | [out] Second (0..59). May be NULL. |
floor(fracDay * 86400 + 0.5)), so round-tripping through encode/decode is bit-identical to a legacy SWMM run. | SWMM_ENGINE_API int swmm_datetime_encode_date | ( | int | year, |
| int | month, | ||
| int | day, | ||
| double * | out | ||
| ) |
Encode a calendar date as a SWMM DateTime (date portion only).
| year | Year in the range 1..9999. |
| month | Month in the range 1..12. |
| day | Day of month, valid for the given year/month. |
| out | [out] SWMM DateTime double (integer days since 1899-12-30). |
out is NULL or the date is out of range. On out-of-range input, *out is set to the sentinel -SWMM_DATETIME_DATE_DELTA (matching legacy datetime_encodeDate). | SWMM_ENGINE_API int swmm_datetime_encode_time | ( | int | hour, |
| int | minute, | ||
| int | second, | ||
| double * | out | ||
| ) |
Encode a wall-clock time as the fractional-day part of a SWMM DateTime.
| hour | Hour [0..]. |
| minute | Minute [0..]. |
| second | Second [0..]. |
| out | [out] Fractional-day value in [0.0, 1.0). |
out is NULL or any input is negative. On invalid input *out is set to 0.0 (matching legacy datetime_encodeTime). | SWMM_ENGINE_API int swmm_datetime_time_diff | ( | double | value1, |
| double | value2, | ||
| long * | out | ||
| ) |
Compute the difference, in whole seconds, between two SWMM DateTimes.
| value1 | Later SWMM DateTime. |
| value2 | Earlier SWMM DateTime. |
| out | [out] value1 - value2 rounded to the nearest second. |
out is NULL.