Exemple #1
0
char *
gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
{
    constexpr size_t max_iso_date_length = 32;
    const char* format = "%Y-%m-%d %H:%M:%s %q";

    if (! buff) return NULL;
    try
    {
        GncDateTime gncdt(ts.tv_sec);
        auto sstr = gncdt.format(format);

        memset(buff, 0, sstr.length() + 1);
        strncpy(buff, sstr.c_str(), sstr.length());
        return buff + sstr.length();
    }
    catch(std::logic_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", ts.tv_sec, err.what());
        return buff;
    }
    catch(std::runtime_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", ts.tv_sec, err.what());
        return buff;
    }
}
Exemple #2
0
char*
gnc_print_time64(time64 time, const char* format)
{
    GncDateTime gncdt(time);
    auto sstr = gncdt.format(format);
    //ugly C allocation so that the ptr can be freed at the other end
    char* cstr = static_cast<char*>(malloc(sstr.length() + 1));
    memset(cstr, 0, sstr.length() + 1);
    strncpy(cstr, sstr.c_str(), sstr.length());
    return cstr;
}
Exemple #3
0
size_t
qof_print_date_buff (char * buff, size_t len, time64 t)
{
    if (!buff) return 0;

    GncDateTime gncdt(t);
    std::string str = gncdt.format(qof_date_format_get_string(dateFormat));
    strncpy(buff, str.c_str(), len);
    if (str.length() >= len)
	buff[len - 1] = '\0';
    return strlen(buff);
}
Exemple #4
0
time64
gnc_mktime (struct tm* time)
{
    try
    {
	normalize_struct_tm (time);
	GncDateTime gncdt(*time);
	return static_cast<time64>(gncdt) - gncdt.offset();
    }
    catch(std::invalid_argument)
    {
	return 0;
    }
}
Exemple #5
0
char *
gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
{
    constexpr size_t max_iso_date_length = 32;
    const char* format = "%Y-%m-%d %H:%M:%s %q";

    if (! buff) return NULL;

    GncDateTime gncdt(ts.tv_sec);
    auto sstr = gncdt.format(format);

    memset(buff, 0, sstr.length() + 1);
    strncpy(buff, sstr.c_str(), sstr.length());
    return buff + sstr.length();
}
Exemple #6
0
Timespec
gnc_iso8601_to_timespec_gmt(const char *cstr)
{
    time64 time;
    if (!cstr) return {0, 0};
    try
    {
        GncDateTime gncdt(cstr);
        return {static_cast<time64>(gncdt), 0};
    }
    catch(...)
    {
        return {0, 0};
    }
}
Exemple #7
0
struct tm*
gnc_gmtime (const time64 *secs)
{
    try
    {
	auto time = static_cast<struct tm*>(calloc(1, sizeof(struct tm)));
	GncDateTime gncdt(*secs);
	*time = gncdt.utc_tm();
	return time;
    }
    catch(std::invalid_argument)
    {
	return NULL;
    }

}
Exemple #8
0
time64
gnc_timegm (struct tm* time)
{
    try
    {
        normalize_struct_tm(time);
        GncDateTime gncdt(*time);
        *time = static_cast<struct tm>(gncdt);
        time->tm_sec -= gncdt.offset();
        normalize_struct_tm(time);
#ifdef HAVE_STRUcT_TM_GMTOFF
        time->tm_gmtoff = 0;
#endif
        return static_cast<time64>(gncdt) - gncdt.offset();
    }
    catch(std::invalid_argument)
    {
        return 0;
    }
}
Exemple #9
0
Timespec
gnc_iso8601_to_timespec_gmt(const char *cstr)
{
    time64 time;
    if (!cstr) return {0, 0};
    try
    {
        GncDateTime gncdt(cstr);
        return {static_cast<time64>(gncdt), 0};
    }
    catch(std::logic_error& err)
    {
        PWARN("Error processing %s: %s", cstr, err.what());
        return {0, 0};
    }
    catch(std::runtime_error& err)
    {
        PWARN("Error processing time64 %s: %s", cstr, err.what());
        return {0, 0};
    }
}
Exemple #10
0
Timespec
gnc_dmy2timespec_neutral (int day, int month, int year)
{
    struct tm date;
    memset (&date, 0, sizeof(struct tm));
    date.tm_year = year - 1900;
    date.tm_mon = month - 1;
    date.tm_mday = day;
    date.tm_hour = 10;
    date.tm_min = 59;
    date.tm_sec = 0;

    GncDateTime gncdt(date);
    auto offset = gncdt.offset() / 3600;
    if (offset < -11)
        date.tm_hour = -offset;
    if (offset > 13)
        date.tm_hour = 23 - offset;

    return {gnc_timegm(&date), 0};
}
Exemple #11
0
size_t
qof_print_date_buff (char * buff, size_t len, time64 t)
{
    if (!buff) return 0;
    try
    {
        GncDateTime gncdt(t);
        std::string str = gncdt.format(qof_date_format_get_string(dateFormat));
        strncpy(buff, str.c_str(), len);
        if (str.length() >= len)
            buff[len - 1] = '\0';
    }
    catch(std::logic_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
    }
    catch(std::runtime_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
    }
    return strlen(buff);
}
Exemple #12
0
char*
gnc_print_time64(time64 time, const char* format)
{
    try
    {
        GncDateTime gncdt(time);
        auto sstr = gncdt.format(format);
        //ugly C allocation so that the ptr can be freed at the other end
        char* cstr = static_cast<char*>(malloc(sstr.length() + 1));
        memset(cstr, 0, sstr.length() + 1);
        strncpy(cstr, sstr.c_str(), sstr.length());
        return cstr;
    }
    catch(std::runtime_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", time, err.what());
        return nullptr;
    }
    catch(std::logic_error& err)
    {
        PWARN("Error processing time64 %" PRId64 ": %s", time, err.what());
        return nullptr;
    }
}