smppex v2.3.3 SMPPEX.Pdu.ValidityPeriod View Source

Module for converting validity period to Unix timestamp.

Module works both with the absolute format of validity period and with the relative one. In case of relative validity period, this module implements a naive representation of the month and year date shifting for the sake of simplicity.

Link to this section Summary

Functions

Converts validity_period/0 to Unix timestamp according to the SMPP specification. The same as to_timestamp/2 but raises an exception in case of error

Converts validity_period/0 to Unix timestamp according to the SMPP specification

Link to this section Types

Link to this type timestamp_origin() View Source
timestamp_origin() :: non_neg_integer()
Link to this type validity_period() View Source
validity_period() :: String.t()

Link to this section Functions

Link to this function to_timestamp!(validity_period, timestamp_origin \\ System.system_time(:second)) View Source
to_timestamp!(validity_period(), timestamp_origin()) :: timestamp()

Converts validity_period/0 to Unix timestamp according to the SMPP specification. The same as to_timestamp/2 but raises an exception in case of error.

Link to this function to_timestamp(validity_period, timestamp_origin \\ System.system_time(:second)) View Source
to_timestamp(validity_period(), timestamp_origin()) ::
  {:ok, timestamp()} | {:error, :invalid_validity_period}

Converts validity_period/0 to Unix timestamp according to the SMPP specification.

In case of the relative format, this function uses a naive implementation of the month and date shifting. To be clear, it takes one month as 30 days and one year as 12 months.

One who uses the function should implement the way how this time shift might be limited according to the SMPP specification:

  • A MC operator may choose to impose a limit on relative time offsets, thus either rejecting a message that exceeds such a limit or reducing the offset to the maximum relative time allowed.

Returns {:ok, timestamp} if conversion was successful.

Returns {:error, :invalid_validity_period} if validity_period is not consistent with the SMPP specification.

In case of internal errors, however, this function raises an exception.

Example (relative format)

iex> timestamp_origin = ~N[2017-01-01 00:00:00] |>
...> DateTime.from_naive!("Etc/UTC") |>
...> DateTime.to_unix()
iex> timestamp = SMPPEX.Pdu.ValidityPeriod.to_timestamp!("000000000005000R", timestamp_origin)
iex> DateTime.from_unix!(timestamp) |> to_string()
"2017-01-01 00:00:05Z"

Example (absolute format)

iex> {:ok, timestamp} = SMPPEX.Pdu.ValidityPeriod.to_timestamp("170610233429004+")
iex> DateTime.from_unix!(timestamp) |> to_string()
"2017-06-10 22:34:29Z"