packages feed

clickhouse-haskell-0.1.1.0: src/Database/ClickHouseDriver/CBits/datetime.c

#define __USE_XOPEN
#define _GNU_SOURCE
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include "datetime.h"

char * convert_time(time_t time, char * timezone, size_t length){
    struct tm mytm = {0};
    mytm.tm_isdst = 1;
    timezone[length] = '\0';
    char * buf = malloc(sizeof(char) * 30);
    putenv(timezone);
    tzset();
    localtime_r(&time, &mytm);
    strftime(buf, 50, "%a, %d %b %Y %H:%M:%S %z(%Z)", &mytm);
    return buf;
}

char * convert_time64(time_t time, char * timezone, size_t length, size_t scale){
    struct tm my_tm = {0};
    my_tm.tm_isdst = 1;
    char * buf = malloc(sizeof(char) * 40);
    putenv(timezone);
    tzset();
    int exp = pow(10, scale);
    time_t scaled = time / exp;
    localtime_r(&scaled, &my_tm);
    return buf;
}

time_t parse_time(char * time_string, char * timezone, size_t length1, size_t length2){
    struct tm my_tm = {0};
    my_tm.tm_isdst = 0;
    timezone[length1] = '\0';
    time_string[length2] = '\0';
    time_t result;
    putenv(timezone);
    tzset();
    strptime(time_string, "%d %b %Y %H:%M:%S", &my_tm);
}

time_t convert_time_from_int32(time_t time){
    struct tm* gmt = gmtime(&time);
    time_t converted = mktime(gmt);
    return converted;
}