![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
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 |
| Ordinal-date offset used to encode 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 and swmm_output_get_period_time. Elapsed-time APIs and callback arguments use their separately documented time units rather than this calendar encoding.
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 |
Ordinal-date offset used to encode the SWMM DateTime epoch.
Exposed so bindings can validate against the same reference value the engine uses internally: ordinal day 1 for 0001-01-01 is converted to SWMM days by subtracting this offset. A value 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.
| [in] | value | Finite input SWMM DateTime in days. |
| [in] | seconds | Finite seconds to add (may be negative or fractional). |
| [out] | out | Caller-owned slot for resulting SWMM days; not retained. |
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.
| [in] | value | Finite SWMM days; floor(value) and its sum with SWMM_DATETIME_DATE_DELTA must fit in int. |
| [out] | year | Year (>= 0). May be NULL. |
| [out] | month | Month (1..12). May be NULL. |
| [out] | day | 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.
| [in] | value | Finite SWMM days; the whole-day portion is ignored. |
| [out] | hour | Hour (0..23). May be NULL. |
| [out] | minute | Minute (0..59). May be NULL. |
| [out] | second | Second (0..59). May be NULL. |
floor(fracDay * 86400 + 0.5)), with results clamped to 23:59:59 when rounding would reach the next day. Subsecond input precision is discarded, matching legacy SWMM. | 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).
| [in] | year | Year in the range 1..9999. |
| [in] | month | Month in the range 1..12. |
| [in] | 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.
| [in] | hour | Nonnegative hours; values above 23 are accepted. |
| [in] | minute | Nonnegative minutes; values above 59 are accepted. |
| [in] | second | Nonnegative seconds; values above 59 are accepted. |
| [out] | out | Elapsed days; can be >= 1.0 for components totaling a day or more. |
out is NULL or any input is negative. The component sum in seconds must fit in int. 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.
| [in] | value1 | Finite SWMM minuend; may be earlier than value2. |
| [in] | value2 | Finite SWMM subtrahend. |
| [out] | out | Signed seconds after rounding each input time independently. |
out is NULL.