Convert unix time (or epoch) to formated date string

Hi,
Using thr RTClib with DS3231 RTC I make variuos time manupulations and calculations.
I need to convert the ulong unix time to a formated string for display.
I noticed the RTClib DateTime() function, but I can not get it to work for me.
Can anyone show a simple way on how to convert any unix time to string?
Thanks

Using tags, (click " < code > "), post your code.

RTClib has the toString() function to convert to a char array, otherwise you can use sprintf() along with the library functions to get the individual elements of the time (year, day, month, hour, etc).

Here is the description of toString() from the library:

/**************************************************************************/
/*!
    @brief  Writes the DateTime as a string in a user-defined format.

    The _buffer_ parameter should be initialized by the caller with a string
    specifying the requested format. This format string may contain any of
    the following specifiers:

    | specifier | output                                                 |
    |-----------|--------------------------------------------------------|
    | YYYY      | the year as a 4-digit number (2000--2099)              |
    | YY        | the year as a 2-digit number (00--99)                  |
    | MM        | the month as a 2-digit number (01--12)                 |
    | MMM       | the abbreviated English month name ("Jan"--"Dec")      |
    | DD        | the day as a 2-digit number (01--31)                   |
    | DDD       | the abbreviated English day of the week ("Mon"--"Sun") |
    | AP        | either "AM" or "PM"                                    |
    | ap        | either "am" or "pm"                                    |
    | hh        | the hour as a 2-digit number (00--23 or 01--12)        |
    | mm        | the minute as a 2-digit number (00--59)                |
    | ss        | the second as a 2-digit number (00--59)                |

    If either "AP" or "ap" is used, the "hh" specifier uses 12-hour mode
    (range: 01--12). Otherwise it works in 24-hour mode (range: 00--23).

    The specifiers within _buffer_ will be overwritten with the appropriate
    values from the DateTime. Any characters not belonging to one of the
    above specifiers are left as-is.

    __Example__: The format "DDD, DD MMM YYYY hh:mm:ss" generates an output
    of the form "Thu, 16 Apr 2020 18:34:56.

    @see The `timestamp()` method provides similar functionnality, but it
        returns a `String` object and supports a limited choice of
        predefined formats.

    @param[in,out] buffer Array of `char` for holding the format description
        and the formatted DateTime. Before calling this method, the buffer
        should be initialized by the user with the format string. The method
        will overwrite the buffer with the formatted date and/or time.

    @return A pointer to the provided buffer. This is returned for
        convenience, in order to enable idioms such as
        `Serial.println(now.toString(buffer));`
*/
/**************************************************************************/

char *DateTime::toString(char *buffer) const {
1 Like

Works for me. What is the problem?

Hey there! It sounds like you're working with time conversions in your RTClib project. While the DateTime() function can be a helpful tool, converting Unix timestamps to formatted strings requires an extra step.

Here's a simple approach to achieve this:

  1. Obtain the Unix Timestamp: I assume you're already getting the Unix timestamp value using your RTClib setup (e.g., from the RTC itself).

  2. Create a DateTime Object: Use the unixtime() function on your DateTime object to create a new instance representing the Unix time:

  3. Format the Date and Time: Now you can use the DateTime object's formatting methods to create a human-readable string. Common options include:

  • now.timestamp(DATETIME_FORMAT) (replace DATETIME_FORMAT with your desired format string, e.g., "%Y-%m-%d %H:%M:%S")
  • Separate calls for individual components (e.g., .year() , .month() , .day() , etc.) for more control over the output.

Additional Resources:

For a comprehensive reference on DateTime object formatting and other time manipulation techniques in RTClib, check out the library's documentation.

This approach should help you convert Unix timestamps to formatted strings using RTClib's DateTime object. Feel free to ask if you have any further questions about time conversions or RTClib functionalities!

1 Like

Ai Ai Captain.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.