|
|
|
|
@ -249,9 +249,17 @@ Timespec
|
|
|
|
|
timespecCanonicalDayTime(Timespec t)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm;
|
|
|
|
|
#ifndef HAVE_LOCALTIME_R
|
|
|
|
|
struct tm *result;
|
|
|
|
|
#endif
|
|
|
|
|
Timespec retval;
|
|
|
|
|
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
|
|
|
|
|
#ifndef HAVE_LOCALTIME_R
|
|
|
|
|
result = localtime(&t_secs);
|
|
|
|
|
tm = *result;
|
|
|
|
|
#else
|
|
|
|
|
localtime_r(&t_secs, &tm);
|
|
|
|
|
#endif
|
|
|
|
|
gnc_tm_set_day_middle(&tm);
|
|
|
|
|
retval.tv_sec = mktime(&tm);
|
|
|
|
|
retval.tv_nsec = 0;
|
|
|
|
|
@ -495,16 +503,24 @@ qof_print_date_dmy_buff (char * buff, size_t len, int day, int month, int year)
|
|
|
|
|
size_t
|
|
|
|
|
qof_print_date_buff (char * buff, size_t len, time_t t)
|
|
|
|
|
{
|
|
|
|
|
struct tm theTime;
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
struct tm theTime_tm;
|
|
|
|
|
#endif
|
|
|
|
|
struct tm *theTime;
|
|
|
|
|
|
|
|
|
|
if (!buff) return 0 ;
|
|
|
|
|
|
|
|
|
|
localtime_r(&t, &theTime);
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
localtime_r (&t, &theTime_tm);
|
|
|
|
|
theTime = &theTime_tm;
|
|
|
|
|
#else
|
|
|
|
|
theTime = localtime (&t);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return qof_print_date_dmy_buff (buff, len,
|
|
|
|
|
theTime.tm_mday,
|
|
|
|
|
theTime.tm_mon + 1,
|
|
|
|
|
theTime.tm_year + 1900);
|
|
|
|
|
theTime->tm_mday,
|
|
|
|
|
theTime->tm_mon + 1,
|
|
|
|
|
theTime->tm_year + 1900);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
size_t
|
|
|
|
|
@ -938,13 +954,21 @@ char dateSeparator (void)
|
|
|
|
|
else
|
|
|
|
|
{ /* Make a guess */
|
|
|
|
|
unsigned char string[256];
|
|
|
|
|
struct tm tm;
|
|
|
|
|
struct tm *tm;
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
struct tm struct_tm;
|
|
|
|
|
#endif
|
|
|
|
|
time_t secs;
|
|
|
|
|
unsigned char *s;
|
|
|
|
|
|
|
|
|
|
secs = time(NULL);
|
|
|
|
|
localtime_r(&secs, &tm);
|
|
|
|
|
strftime(string, sizeof(string), GNC_D_FMT, &tm);
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
localtime_r(&secs, &struct_tm);
|
|
|
|
|
tm = &struct_tm;
|
|
|
|
|
#else
|
|
|
|
|
tm = localtime(&secs);
|
|
|
|
|
#endif
|
|
|
|
|
strftime(string, sizeof(string), GNC_D_FMT, tm);
|
|
|
|
|
|
|
|
|
|
for (s = string; s != '\0'; s++)
|
|
|
|
|
if (!isdigit(*s))
|
|
|
|
|
@ -1190,22 +1214,38 @@ gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
|
|
|
|
|
int
|
|
|
|
|
gnc_timespec_last_mday (Timespec t)
|
|
|
|
|
{
|
|
|
|
|
struct tm result;
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
struct tm tm;
|
|
|
|
|
#endif
|
|
|
|
|
struct tm *result;
|
|
|
|
|
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
|
|
|
|
|
localtime_r(&t_secs, &result);
|
|
|
|
|
return date_get_last_mday (&result);
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
localtime_r(&t_secs, &tm);
|
|
|
|
|
result = &tm;
|
|
|
|
|
#else
|
|
|
|
|
result = localtime(&t_secs);
|
|
|
|
|
#endif
|
|
|
|
|
return date_get_last_mday (result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
gnc_timespec2dmy (Timespec t, int *day, int *month, int *year)
|
|
|
|
|
{
|
|
|
|
|
struct tm result;
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
struct tm tm;
|
|
|
|
|
#endif
|
|
|
|
|
struct tm *result;
|
|
|
|
|
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
|
|
|
|
|
localtime_r(&t_secs, &result);
|
|
|
|
|
#ifdef HAVE_LOCALTIME_R
|
|
|
|
|
localtime_r(&t_secs, &tm);
|
|
|
|
|
result = &tm;
|
|
|
|
|
#else
|
|
|
|
|
result = localtime(&t_secs);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (day) *day = result.tm_mday;
|
|
|
|
|
if (month) *month = result.tm_mon+1;
|
|
|
|
|
if (year) *year = result.tm_year+1900;
|
|
|
|
|
if (day) *day = result->tm_mday;
|
|
|
|
|
if (month) *month = result->tm_mon+1;
|
|
|
|
|
if (year) *year = result->tm_year+1900;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/********************************************************************\
|
|
|
|
|
|