diff options
Diffstat (limited to 'src/gensvm_timer.c')
| -rw-r--r-- | src/gensvm_timer.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/gensvm_timer.c b/src/gensvm_timer.c new file mode 100644 index 0000000..a871887 --- /dev/null +++ b/src/gensvm_timer.c @@ -0,0 +1,73 @@ +/** + * @file timer.c + * @author Gertjan van den Burg + * @date January, 2014 + * @brief Utility functions relating to time + * + * @details + * This file contains a simple function for calculating the time in seconds + * elapsed between two clock() calls. It also contains a function for + * generating a string of the current time, used in writing output files. + */ + +#include <time.h> + +#include "gensvm_timer.h" + +/** + * @brief Calculate the time between two clocks + * + * @param[in] s_time starting time + * @param[in] e_time end time + * @returns time elapsed in seconds + */ +double elapsed_time(clock_t s_time, clock_t e_time) +{ + return ((double) (e_time - s_time))/((double) CLOCKS_PER_SEC); +} + +/** + * @brief Get time string with UTC offset + * + * @details + * Create a string for the current system time. Include an offset of UTC for + * consistency. The format of the generated string is "DDD MMM D HH:MM:SS + * YYYY (UTC +HH:MM)", e.g. "Fri Aug 9, 12:34:56 2013 (UTC +02:00)". + * + * @param[in,out] buffer allocated string buffer, on exit contains + * formatted string + * + */ +void get_time_string(char *buffer) +{ + int diff, hours, minutes; + char timestr[MAX_LINE_LENGTH]; + time_t current_time, lt, gt; + struct tm *lclt; + + // get current time (in epoch) + current_time = time(NULL); + if (current_time == ((time_t)-1)) { + fprintf(stderr, "Failed to compute the current time.\n"); + return; + } + + // convert time to local time and create a string + lclt = localtime(¤t_time); + strftime(timestr, MAX_LINE_LENGTH, "%c", lclt); + if (timestr == NULL) { + fprintf(stderr, "Failed to convert time to string.\n"); + return; + } + + // calculate the UTC offset including DST + lt = mktime(localtime(¤t_time)); + gt = mktime(gmtime(¤t_time)); + diff = -difftime(gt, lt); + hours = (diff/3600); + minutes = (diff%3600)/60; + if (lclt->tm_isdst == 1) + hours++; + + sprintf(buffer, "%s (UTC %+03i:%02i)", timestr, hours, minutes); +} |
