GnuCash  4.14+
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables

Date and Time handling routines. More...

#include <glib-object.h>
#include <time.h>

Go to the source code of this file.

Data Structures

struct  Time64
 

Macros

#define MAX_DATE_LENGTH   34
 The maximum length of a string created by the date printers.
 
#define QOF_UTC_DATE_FORMAT   "%Y-%m-%dT%H:%M:%SZ"
 Constants. More...
 
#define DATE_FORMAT_FIRST   QOF_DATE_FORMAT_US
 
#define DATE_FORMAT_LAST   QOF_DATE_FORMAT_UTC
 
#define qof_date_format_get_format   qof_date_text_format_get_string
 

Typedefs

typedef gint64 time64
 Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-32 typedef for time_t. More...
 

Enumerations

enum  QofDateFormat {
  QOF_DATE_FORMAT_US, QOF_DATE_FORMAT_UK, QOF_DATE_FORMAT_CE, QOF_DATE_FORMAT_ISO,
  QOF_DATE_FORMAT_LOCALE, QOF_DATE_FORMAT_UTC, QOF_DATE_FORMAT_CUSTOM, QOF_DATE_FORMAT_UNSET
}
 Enum for determining a date format. More...
 
enum  QofDateCompletion { QOF_DATE_COMPLETION_THISYEAR, QOF_DATE_COMPLETION_SLIDING }
 Enum for date completion modes (for dates entered without year) More...
 
enum  GNCDateMonthFormat { GNCDATE_MONTH_NUMBER, GNCDATE_MONTH_ABBREV, GNCDATE_MONTH_NAME }
 This is how to format the month, as a number, an abbreviated string, or the full name.
 

Functions

struct tm * gnc_localtime (const time64 *secs)
 fill out a time struct from a 64-bit time value. More...
 
struct tm * gnc_localtime_r (const time64 *secs, struct tm *time)
 fill out a time struct from a 64-bit time value adjusted for the current time zone. More...
 
struct tm * gnc_gmtime (const time64 *secs)
 fill out a time struct from a 64-bit time value More...
 
gint gnc_start_of_week (void)
 returns an integer corresponding to locale start of week More...
 
time64 gnc_mktime (struct tm *time)
 calculate seconds from the epoch given a time struct More...
 
time64 gnc_timegm (struct tm *time)
 calculate seconds from the epoch given a time struct More...
 
gchar * gnc_ctime (const time64 *secs)
 Return a string representation of a date from a 64-bit time value. More...
 
time64 gnc_time (time64 *tbuf)
 get the current local time More...
 
gdouble gnc_difftime (const time64 secs1, const time64 secs2)
 Find the difference in seconds between two time values. More...
 
void gnc_tm_free (struct tm *time)
 free a struct tm* created with gnc_localtime() or gnc_gmtime() More...
 
time64 time64CanonicalDayTime (time64 t)
 convert a time64 on a certain day (localtime) to the time64 representing midday on that day. More...
 
time64 gdate_to_time64 (GDate d)
 Turns a GDate into a time64, returning the first second of the day.
 
time64 gnc_dmy2time64 (gint day, gint month, gint year)
 Convert a day, month, and year to a time64, returning the first second of the day.
 
time64 gnc_dmy2time64_neutral (gint day, gint month, gint year)
 Converts a day, month, and year to a time64 representing 11:00:00 UTC 11:00:00 UTC falls on the same time in almost all timezones, the exceptions being the +13, +14, and -12 timezones used by countries along the International Date Line. More...
 
time64 gnc_dmy2time64_end (gint day, gint month, gint year)
 Same as gnc_dmy2time64, but last second of the day.
 
time64 gnc_iso8601_to_time64_gmt (const gchar *)
 The gnc_iso8601_to_time64_gmt() routine converts an ISO-8601 style date/time string to time64. More...
 
gchar * gnc_time64_to_iso8601_buff (time64, char *buff)
 The gnc_time64_to_iso8601_buff() routine takes the input UTC time64 value and prints it as an ISO-8601 style string. More...
 
void qof_date_completion_set (QofDateCompletion dc, int backmonths)
 The qof_date_completion_set() routing sets the date completion method to one of QOF_DATE_COMPLETION_THISYEAR (for completing the year to the current calendar year) or QOF_DATE_COMPLETION_SLIDING (for using a sliding 12-month window). More...
 
gchar dateSeparator (void)
 dateSeparator Return the field separator for the current date format More...
 
String / DateFormat conversion.
const gchar * gnc_date_dateformat_to_string (QofDateFormat format)
 The string->value versions return FALSE on success and TRUE on failure.
 
gboolean gnc_date_string_to_dateformat (const gchar *format_string, QofDateFormat *format)
 Converts the date format to a printable string. More...
 
const gchar * gnc_date_monthformat_to_string (GNCDateMonthFormat format)
 
gboolean gnc_date_string_to_monthformat (const gchar *format_string, GNCDateMonthFormat *format)
 Converts the month format to a printable string. More...
 
char * gnc_print_time64 (time64 time, const char *format)
 print a time64 as a date string per format More...
 
GDate time64 setters
GDate * gnc_g_date_new_today (void)
 Returns a newly allocated date of the current clock time, taken from time(2). More...
 
void gnc_gdate_set_today (GDate *gd)
 Set a GDate to the current day. More...
 
void gnc_gdate_set_time64 (GDate *gd, time64 time)
 Set a GDate to a time64. More...
 
QofDateFormat functions
QofDateFormat qof_date_format_get (void)
 The qof_date_format_get routine returns the date format that the date printing will use when printing a date, and the scanning routines will assume when parsing a date. More...
 
void qof_date_format_set (QofDateFormat df)
 The qof_date_format_set() routine sets date format to one of US, UK, CE, OR ISO. More...
 
const gchar * qof_date_format_get_string (QofDateFormat df)
 This function returns a strftime formatting string for printing an all numeric date (e.g. More...
 
const gchar * qof_date_text_format_get_string (QofDateFormat df)
 This function returns a strftime formatting string for printing a date using words and numbers (e.g. More...
 
Date Printing/Scanning functions
gsize qof_strftime (gchar *buf, gsize max, const gchar *format, const struct tm *tm)
 qof_strftime calls qof_format_time to print a given time and afterwards tries to put the result into a buffer of fixed size. More...
 
size_t qof_print_date_dmy_buff (gchar *buff, size_t buflen, int day, int month, int year)
 qof_print_date_dmy_buff Convert a date as day / month / year integers into a localized string representation More...
 
size_t qof_print_date_buff (char *buff, size_t buflen, time64 secs)
 Convenience: calls through to qof_print_date_dmy_buff(). More...
 
size_t qof_print_gdate (char *buf, size_t bufflen, const GDate *gd)
 Convenience; calls through to qof_print_date_dmy_buff(). More...
 
char * qof_print_date (time64 secs)
 Convenience; calls through to qof_print_date_dmy_buff(). More...
 
size_t qof_print_date_time_buff (char *buff, size_t len, time64 secs)
 Returns the number of bytes printed.
 
gboolean qof_scan_date (const char *buff, int *day, int *month, int *year)
 qof_scan_date Convert a string into day / month / year integers according to the current dateFormat value. More...
 
Date Start/End Adjustment routines

Given a time value, adjust it to be the beginning or end of that day.

void gnc_tm_set_day_neutral (struct tm *tm)
 The gnc_tm_set_day_neutral() inline routine will set the appropriate fields in the struct tm to indicate 10:59am of that day.
 
time64 gnc_time64_get_day_start (time64 time_val)
 The gnc_time64_get_day_start() routine will take the given time in seconds and adjust it to the first second of that day. More...
 
time64 gnc_time64_get_day_neutral (time64 time_val)
 The gnc_time64_get_day_neutral() routine will take the given time in seconds and adjust it to 10:59:00Z of that day. More...
 
time64 gnc_time64_get_day_end (time64 time_val)
 The gnc_time64_get_day_end() routine will take the given time in seconds and adjust it to the last second of that day. More...
 
int gnc_date_get_last_mday (int month, int year)
 Get the numerical last date of the month. More...
 
GDate hash table support
gint gnc_gdate_equal (gconstpointer gda, gconstpointer gdb)
 Compares two GDate*'s for equality; useful for using GDate*'s as GHashTable keys. More...
 
guint gnc_gdate_hash (gconstpointer gd)
 Provides a "hash" of a GDate* value; useful for using GDate*'s as GHashTable keys. More...
 
GDate to time64 conversions
GDate time64_to_gdate (time64 t)
 Returns the GDate in which the time64 occurs. More...
 
time64 gnc_time64_get_day_start_gdate (const GDate *date)
 The gnc_time64_get_day_start() routine will take the given time in GLib GDate format and adjust it to the first second of that day.
 
time64 gnc_time64_get_day_end_gdate (const GDate *date)
 The gnc_time64_get_day_end() routine will take the given time in GLib GDate format and adjust it to the last second of that day.
 
Date Manipulation
void gnc_gdate_set_month_start (GDate *date)
 This function modifies a GDate to set it to the first day of the month in which it falls. More...
 
void gnc_gdate_set_month_end (GDate *date)
 This function modifies a GDate to set it to the last day of the month in which it falls. More...
 
void gnc_gdate_set_prev_month_start (GDate *date)
 This function modifies a GDate to set it to the first day of the month prior to the one in which it falls. More...
 
void gnc_gdate_set_prev_month_end (GDate *date)
 This function modifies a GDate to set it to the last day of the month prior to the one in which it falls. More...
 
void gnc_gdate_set_quarter_start (GDate *date)
 This function modifies a GDate to set it to the first day of the quarter in which it falls. More...
 
void gnc_gdate_set_quarter_end (GDate *date)
 This function modifies a GDate to set it to the last day of the quarter in which it falls. More...
 
void gnc_gdate_set_prev_quarter_start (GDate *date)
 This function modifies a GDate to set it to the first day of the quarter prior to the one in which it falls. More...
 
void gnc_gdate_set_prev_quarter_end (GDate *date)
 This function modifies a GDate to set it to the last day of the quarter prior to the one in which it falls. More...
 
void gnc_gdate_set_year_start (GDate *date)
 This function modifies a GDate to set it to the first day of the year in which it falls. More...
 
void gnc_gdate_set_year_end (GDate *date)
 This function modifies a GDate to set it to the last day of the year in which it falls. More...
 
void gnc_gdate_set_prev_year_start (GDate *date)
 This function modifies a GDate to set it to the first day of the year prior to the one in which it falls. More...
 
void gnc_gdate_set_prev_year_end (GDate *date)
 This function modifies a GDate to set it to the last day of the year prior to the one in which it falls. More...
 
void gnc_gdate_set_fiscal_year_start (GDate *date, const GDate *year_end)
 This function modifies a GDate to set it to the first day of the fiscal year in which it falls. More...
 
void gnc_gdate_set_fiscal_year_end (GDate *date, const GDate *year_end)
 This function modifies a GDate to set it to the last day of the fiscal year in which it falls. More...
 
void gnc_gdate_set_prev_fiscal_year_start (GDate *date, const GDate *year_end)
 This function modifies a GDate to set it to the first day of the fiscal year prior to the one in which it falls. More...
 
void gnc_gdate_set_prev_fiscal_year_end (GDate *date, const GDate *year_end)
 This function modifies a GDate to set it to the last day of the fiscal year prior to the one in which it falls. More...
 

Variables

const char * gnc_default_strftime_date_format
 The default date format for use with strftime. More...
 

GValue

#define GNC_TYPE_TIME64   (time64_get_type ())
 
GType time64_get_type (void)
 

Today's Date

#define MIN_BUF_LEN   10
 
void gnc_tm_get_today_start (struct tm *tm)
 The gnc_tm_get_today_start() routine takes a pointer to a struct tm and fills it in with the first second of the today. More...
 
void gnc_tm_get_today_neutral (struct tm *tm)
 The gnc_tm_get_today_start() routine takes a pointer to a struct tm and fills it in with the timezone neutral time (10:59:00Z). More...
 
void gnc_tm_get_today_end (struct tm *tm)
 The gnc_tm_get_today_end() routine takes a pointer to a struct tm and fills it in with the last second of the today. More...
 
time64 gnc_time64_get_today_start (void)
 The gnc_time64_get_today_start() routine returns a time64 value corresponding to the first second of today. More...
 
time64 gnc_time64_get_today_end (void)
 The gnc_time64_get_today_end() routine returns a time64 value corresponding to the last second of today. More...
 
char * gnc_date_timestamp (void)
 Make a timestamp in YYYYMMDDHHMMSS format. More...
 
void gnc_dow_abbrev (gchar *buf, int buf_len, int dow)
 Localized DOW abbreviation. More...
 

Detailed Description

Date and Time handling routines.

Definition in file gnc-date.h.

Function Documentation

◆ dateSeparator()

gchar dateSeparator ( void  )

dateSeparator Return the field separator for the current date format

Args: none

Return: date character

Globals: global dateFormat value

Definition at line 928 of file gnc-date.cpp.

929 {
930  static char locale_separator = '\0';
931 
932  switch (dateFormat)
933  {
934  case QOF_DATE_FORMAT_CE:
935  return '.';
936  case QOF_DATE_FORMAT_ISO:
937  case QOF_DATE_FORMAT_UTC:
938  return '-';
939  case QOF_DATE_FORMAT_US:
940  case QOF_DATE_FORMAT_UK:
941  default:
942  return '/';
944  if (locale_separator != '\0')
945  return locale_separator;
946  else
947  {
948  /* Make a guess */
949  gchar string[256];
950  struct tm tm;
951  time64 secs;
952  gchar *s;
953 
954  secs = gnc_time (NULL);
955  gnc_localtime_r(&secs, &tm);
956  auto normalized_fmt =
957  normalize_format(qof_date_format_get_string(dateFormat));
958  qof_strftime(string, sizeof(string), normalized_fmt.c_str(), &tm);
959 
960  for (s = string; *s != '\0'; s++)
961  if (!isdigit(*s))
962  return (locale_separator = *s);
963  }
964  break;
965  }
966  return '\0';
967 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:133
gsize qof_strftime(gchar *buf, gsize max, const gchar *format, const struct tm *tm)
qof_strftime calls qof_format_time to print a given time and afterwards tries to put the result into ...
Definition: gnc-date.cpp:1058
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:132
struct tm * gnc_localtime_r(const time64 *secs, struct tm *time)
fill out a time struct from a 64-bit time value adjusted for the current time zone.
Definition: gnc-date.cpp:117
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:135
time64 gnc_time(time64 *tbuf)
get the current local time
Definition: gnc-date.cpp:273
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
Definition: gnc-date.h:93
Take from locale information.
Definition: gnc-date.h:134
Britain: dd/mm/yyyy.
Definition: gnc-date.h:131
const gchar * qof_date_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing an all numeric date (e...
Definition: gnc-date.cpp:509
United states: mm/dd/yyyy.
Definition: gnc-date.h:130

◆ gnc_date_get_last_mday()

int gnc_date_get_last_mday ( int  month,
int  year 
)

Get the numerical last date of the month.

(28, 29, 30, 31)

Definition at line 422 of file gnc-date.cpp.

423 {
424  static int last_day_of_month[2][12] =
425  {
426  /* non leap */ {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
427  /* leap */ {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
428  };
429 
430  /* Is this a leap year? */
431  if (year % 2000 == 0) return last_day_of_month[1][month];
432  if (year % 400 == 0 ) return last_day_of_month[0][month];
433  if (year % 4 == 0 ) return last_day_of_month[1][month];
434  return last_day_of_month[0][month];
435 }

◆ gnc_date_timestamp()

char* gnc_date_timestamp ( void  )

Make a timestamp in YYYYMMDDHHMMSS format.

Returns
A pointer to the generated string.
Note
The caller owns this buffer and must g_free it when done.

Definition at line 1103 of file gnc-date.cpp.

1104 {
1105  return g_strdup(GncDateTime::timestamp().c_str());
1106 }
static std::string timestamp()
Get an undelimited string representing the current date and time.

◆ gnc_dow_abbrev()

void gnc_dow_abbrev ( gchar *  buf,
int  buf_len,
int  dow 
)

Localized DOW abbreviation.

Parameters
buf_lenat least MIN_BUF_LEN
dowstruct tm semantics: 0=sunday .. 6=saturday

Definition at line 1369 of file gnc-date.cpp.

1370 {
1371  struct tm my_tm;
1372  int i;
1373 
1374  memset(buf, 0, buf_len);
1375  memset(&my_tm, 0, sizeof(struct tm));
1376  my_tm.tm_wday = dow;
1377  i = qof_strftime(buf, buf_len, "%a", &my_tm);
1378  buf[i] = 0;
1379 }
gsize qof_strftime(gchar *buf, gsize max, const gchar *format, const struct tm *tm)
qof_strftime calls qof_format_time to print a given time and afterwards tries to put the result into ...
Definition: gnc-date.cpp:1058

◆ gnc_gdate_equal()

gint gnc_gdate_equal ( gconstpointer  gda,
gconstpointer  gdb 
)

Compares two GDate*'s for equality; useful for using GDate*'s as GHashTable keys.

Definition at line 1419 of file gnc-date.cpp.

1420 {
1421  return (g_date_compare( (GDate*)gda, (GDate*)gdb ) == 0 ? TRUE : FALSE);
1422 }

◆ gnc_gdate_hash()

guint gnc_gdate_hash ( gconstpointer  gd)

Provides a "hash" of a GDate* value; useful for using GDate*'s as GHashTable keys.

Definition at line 1425 of file gnc-date.cpp.

1426 {
1427  gint val = (g_date_get_year( (GDate*)gd ) * 10000)
1428  + (g_date_get_month( (GDate*)gd ) * 100)
1429  + g_date_get_day( (GDate*)gd );
1430  return g_int_hash( &val );
1431 }

◆ gnc_gdate_set_fiscal_year_end()

void gnc_gdate_set_fiscal_year_end ( GDate *  date,
const GDate *  year_end 
)

This function modifies a GDate to set it to the last day of the fiscal year in which it falls.

For example, if this function is called with a date of 2003-09-24 and a fiscal year ending July 31st, the date will be modified to 2004-07-31.

Parameters
dateThe GDate to modify.
year_endA GDate containing the last month and day of the fiscal year. The year field of this argument is ignored.

Definition at line 1622 of file gnc-date.cpp.

1624 {
1625  GDate temp;
1626  gboolean new_fy;
1627 
1628  g_return_if_fail(date);
1629  g_return_if_fail(fy_end);
1630 
1631  /* Compute the FY end that occurred this CY */
1632  temp = *fy_end;
1633  g_date_set_year(&temp, g_date_get_year(date));
1634 
1635  /* Has it already passed? */
1636  new_fy = (g_date_compare(date, &temp) > 0);
1637 
1638  /* Set end date */
1639  *date = temp;
1640  if (new_fy)
1641  g_date_add_years(date, 1);
1642 }

◆ gnc_gdate_set_fiscal_year_start()

void gnc_gdate_set_fiscal_year_start ( GDate *  date,
const GDate *  year_end 
)

This function modifies a GDate to set it to the first day of the fiscal year in which it falls.

For example, if this function is called with a date of 2003-09-24 and a fiscal year ending July 31st, the date will be modified to 2003-08-01.

Parameters
dateThe GDate to modify.
year_endA GDate containing the last month and day of the fiscal year. The year field of this argument is ignored.

Definition at line 1598 of file gnc-date.cpp.

1600 {
1601  GDate temp;
1602  gboolean new_fy;
1603 
1604  g_return_if_fail(date);
1605  g_return_if_fail(fy_end);
1606 
1607  /* Compute the FY end that occurred this CY */
1608  temp = *fy_end;
1609  g_date_set_year(&temp, g_date_get_year(date));
1610 
1611  /* Has it already passed? */
1612  new_fy = (g_date_compare(date, &temp) > 0);
1613 
1614  /* Set start date */
1615  *date = temp;
1616  g_date_add_days(date, 1);
1617  if (!new_fy)
1618  g_date_subtract_years(date, 1);
1619 }

◆ gnc_gdate_set_month_end()

void gnc_gdate_set_month_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the month in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-09-30.

Parameters
dateThe GDate to modify.

This function modifies a GDate to set it to the last day of the month in which it falls.

This routine has no knowledge of how many days are in a month, whether its a leap year, etc. All that information is contained in the glib date functions.

Parameters
dateThe GDate to modify.

Definition at line 1485 of file gnc-date.cpp.

1486 {
1487  /* First set the start of next month. */
1488  g_date_set_day(date, 1);
1489  g_date_add_months(date, 1);
1490 
1491  /* Then back up one day */
1492  g_date_subtract_days(date, 1);
1493 }

◆ gnc_gdate_set_month_start()

void gnc_gdate_set_month_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the month in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-09-01.

Parameters
dateThe GDate to modify.

Definition at line 1472 of file gnc-date.cpp.

1473 {
1474  g_date_set_day(date, 1);
1475 }

◆ gnc_gdate_set_prev_fiscal_year_end()

void gnc_gdate_set_prev_fiscal_year_end ( GDate *  date,
const GDate *  year_end 
)

This function modifies a GDate to set it to the last day of the fiscal year prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 and a fiscal year ending July 31st, the date will be modified to 2003-07-31.

Parameters
dateThe GDate to modify.
year_endA GDate containing the last month and day of the fiscal year. The year field of this argument is ignored.

Definition at line 1656 of file gnc-date.cpp.

1658 {
1659  g_return_if_fail(date);
1660  g_return_if_fail(fy_end);
1661 
1662  gnc_gdate_set_fiscal_year_end(date, fy_end);
1663  g_date_subtract_years(date, 1);
1664 }
void gnc_gdate_set_fiscal_year_end(GDate *date, const GDate *year_end)
This function modifies a GDate to set it to the last day of the fiscal year in which it falls...
Definition: gnc-date.cpp:1622

◆ gnc_gdate_set_prev_fiscal_year_start()

void gnc_gdate_set_prev_fiscal_year_start ( GDate *  date,
const GDate *  year_end 
)

This function modifies a GDate to set it to the first day of the fiscal year prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 and a fiscal year ending July 31st, the date will be modified to 2002-08-01.

Parameters
dateThe GDate to modify.
year_endA GDate containing the last month and day of the fiscal year. The year field of this argument is ignored.

Definition at line 1645 of file gnc-date.cpp.

1647 {
1648  g_return_if_fail(date);
1649  g_return_if_fail(fy_end);
1650 
1651  gnc_gdate_set_fiscal_year_start(date, fy_end);
1652  g_date_subtract_years(date, 1);
1653 }
void gnc_gdate_set_fiscal_year_start(GDate *date, const GDate *year_end)
This function modifies a GDate to set it to the first day of the fiscal year in which it falls...
Definition: gnc-date.cpp:1598

◆ gnc_gdate_set_prev_month_end()

void gnc_gdate_set_prev_month_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the month prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-08-31.

Parameters
dateThe GDate to modify.

This function modifies a GDate to set it to the last day of the month prior to the one in which it falls.

This routine has no knowledge of how many days are in a month, whether its a leap year, etc. All that information is contained in the glib date functions.

Parameters
dateThe GDate to modify.

Definition at line 1517 of file gnc-date.cpp.

1518 {
1519  /* This will correctly handle the varying month lengths */
1520  g_date_set_day(date, 1);
1521  g_date_subtract_days(date, 1);
1522 }

◆ gnc_gdate_set_prev_month_start()

void gnc_gdate_set_prev_month_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the month prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-08-01.

Parameters
dateThe GDate to modify.

This function modifies a GDate to set it to the first day of the month prior to the one in which it falls.

This routine has no knowledge of how many days are in a month, whether its a leap year, etc. All that information is contained in the glib date functions.

Parameters
dateThe GDate to modify.

Definition at line 1503 of file gnc-date.cpp.

1504 {
1505  g_date_set_day(date, 1);
1506  g_date_subtract_months(date, 1);
1507 }

◆ gnc_gdate_set_prev_quarter_end()

void gnc_gdate_set_prev_quarter_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the quarter prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-06-30.

Parameters
dateThe GDate to modify.

Definition at line 1559 of file gnc-date.cpp.

1560 {
1561  g_date_subtract_months(date, 3);
1563 }
void gnc_gdate_set_quarter_end(GDate *date)
This function modifies a GDate to set it to the last day of the quarter in which it falls...
Definition: gnc-date.cpp:1540

◆ gnc_gdate_set_prev_quarter_start()

void gnc_gdate_set_prev_quarter_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the quarter prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-04-01.

Parameters
dateThe GDate to modify.

Definition at line 1552 of file gnc-date.cpp.

1553 {
1555  g_date_subtract_months(date, 3);
1556 }
void gnc_gdate_set_quarter_start(GDate *date)
This function modifies a GDate to set it to the first day of the quarter in which it falls...
Definition: gnc-date.cpp:1527

◆ gnc_gdate_set_prev_year_end()

void gnc_gdate_set_prev_year_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the year prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2002-12-31.

Parameters
dateThe GDate to modify.

Definition at line 1589 of file gnc-date.cpp.

1590 {
1591  gnc_gdate_set_year_end(date);
1592  g_date_subtract_years(date, 1);
1593 }
void gnc_gdate_set_year_end(GDate *date)
This function modifies a GDate to set it to the last day of the year in which it falls.
Definition: gnc-date.cpp:1575

◆ gnc_gdate_set_prev_year_start()

void gnc_gdate_set_prev_year_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the year prior to the one in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2002-01-01.

Parameters
dateThe GDate to modify.

Definition at line 1582 of file gnc-date.cpp.

1583 {
1585  g_date_subtract_years(date, 1);
1586 }
void gnc_gdate_set_year_start(GDate *date)
This function modifies a GDate to set it to the first day of the year in which it falls...
Definition: gnc-date.cpp:1568

◆ gnc_gdate_set_quarter_end()

void gnc_gdate_set_quarter_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the quarter in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-09-30.

Parameters
dateThe GDate to modify.

Definition at line 1540 of file gnc-date.cpp.

1541 {
1542  const GDateMonth months[] = {G_DATE_MARCH, G_DATE_JUNE,
1543  G_DATE_SEPTEMBER, G_DATE_DECEMBER};
1544  const GDateDay days[] = {31, 30, 30, 31};
1545  int quarter = (g_date_get_month (date) - 1) / 3;
1546 
1547  g_date_set_month (date, months[quarter]);
1548  g_date_set_day (date, days[quarter]);
1549 }

◆ gnc_gdate_set_quarter_start()

void gnc_gdate_set_quarter_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the quarter in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-07-01.

Parameters
dateThe GDate to modify.

Definition at line 1527 of file gnc-date.cpp.

1528 {
1529  gint months;
1530 
1531  /* Set the date to the first day of the specified month. */
1532  g_date_set_day(date, 1);
1533 
1534  /* Back up 0-2 months */
1535  months = (g_date_get_month(date) - G_DATE_JANUARY) % 3;
1536  g_date_subtract_months(date, months);
1537 }

◆ gnc_gdate_set_year_end()

void gnc_gdate_set_year_end ( GDate *  date)

This function modifies a GDate to set it to the last day of the year in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-12-31.

Parameters
dateThe GDate to modify.

Definition at line 1575 of file gnc-date.cpp.

1576 {
1577  g_date_set_month(date, G_DATE_DECEMBER);
1578  g_date_set_day(date, 31);
1579 }

◆ gnc_gdate_set_year_start()

void gnc_gdate_set_year_start ( GDate *  date)

This function modifies a GDate to set it to the first day of the year in which it falls.

For example, if this function is called with a date of 2003-09-24 the date will be modified to 2003-01-01.

Parameters
dateThe GDate to modify.

Definition at line 1568 of file gnc-date.cpp.

1569 {
1570  g_date_set_month(date, G_DATE_JANUARY);
1571  g_date_set_day(date, 1);
1572 }

◆ gnc_time64_get_day_end()

time64 gnc_time64_get_day_end ( time64  time_val)

The gnc_time64_get_day_end() routine will take the given time in seconds and adjust it to the last second of that day.

Definition at line 1320 of file gnc-date.cpp.

1321 {
1322  struct tm tm;
1323  time64 new_time;
1324 
1325  gnc_tm_get_day_end(&tm, time_val);
1326  new_time = gnc_mktime(&tm);
1327  return new_time;
1328 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:230
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
Definition: gnc-date.h:93

◆ gnc_time64_get_day_neutral()

time64 gnc_time64_get_day_neutral ( time64  time_val)

The gnc_time64_get_day_neutral() routine will take the given time in seconds and adjust it to 10:59:00Z of that day.

Definition at line 1311 of file gnc-date.cpp.

1312 {
1313  struct tm tm;
1314  gnc_localtime_r(&time_val, &tm);
1315  return gnc_dmy2time64_internal(tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900,
1316  DayPart::neutral);
1317 }
struct tm * gnc_localtime_r(const time64 *secs, struct tm *time)
fill out a time struct from a 64-bit time value adjusted for the current time zone.
Definition: gnc-date.cpp:117

◆ gnc_time64_get_day_start()

time64 gnc_time64_get_day_start ( time64  time_val)

The gnc_time64_get_day_start() routine will take the given time in seconds and adjust it to the first second of that day.

Definition at line 1300 of file gnc-date.cpp.

1301 {
1302  struct tm tm;
1303  time64 new_time;
1304 
1305  gnc_tm_get_day_start(&tm, time_val);
1306  new_time = gnc_mktime(&tm);
1307  return new_time;
1308 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:230
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
Definition: gnc-date.h:93

◆ gnc_time64_get_today_end()

time64 gnc_time64_get_today_end ( void  )

The gnc_time64_get_today_end() routine returns a time64 value corresponding to the last second of today.

Definition at line 1360 of file gnc-date.cpp.

1361 {
1362  struct tm tm;
1363 
1364  gnc_tm_get_day_end(&tm, time(NULL));
1365  return gnc_mktime(&tm);
1366 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:230

◆ gnc_time64_get_today_start()

time64 gnc_time64_get_today_start ( void  )

The gnc_time64_get_today_start() routine returns a time64 value corresponding to the first second of today.

Definition at line 1351 of file gnc-date.cpp.

1352 {
1353  struct tm tm;
1354 
1355  gnc_tm_get_day_start(&tm, time(NULL));
1356  return gnc_mktime(&tm);
1357 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:230

◆ gnc_tm_get_today_end()

void gnc_tm_get_today_end ( struct tm *  tm)

The gnc_tm_get_today_end() routine takes a pointer to a struct tm and fills it in with the last second of the today.

Definition at line 1345 of file gnc-date.cpp.

1346 {
1347  gnc_tm_get_day_end(tm, time(NULL));
1348 }

◆ gnc_tm_get_today_neutral()

void gnc_tm_get_today_neutral ( struct tm *  tm)

The gnc_tm_get_today_start() routine takes a pointer to a struct tm and fills it in with the timezone neutral time (10:59:00Z).

Definition at line 1339 of file gnc-date.cpp.

1340 {
1341  gnc_tm_get_day_neutral(tm, time(NULL));
1342 }

◆ gnc_tm_get_today_start()

void gnc_tm_get_today_start ( struct tm *  tm)

The gnc_tm_get_today_start() routine takes a pointer to a struct tm and fills it in with the first second of the today.

Definition at line 1333 of file gnc-date.cpp.

1334 {
1335  gnc_tm_get_day_start(tm, time(NULL));
1336 }

◆ qof_date_completion_set()

void qof_date_completion_set ( QofDateCompletion  dc,
int  backmonths 
)

The qof_date_completion_set() routing sets the date completion method to one of QOF_DATE_COMPLETION_THISYEAR (for completing the year to the current calendar year) or QOF_DATE_COMPLETION_SLIDING (for using a sliding 12-month window).

The sliding window starts 'backmonth' months before the current month (0-11)

Definition at line 475 of file gnc-date.cpp.

476 {
477  if (dc == QOF_DATE_COMPLETION_THISYEAR ||
479  {
480  dateCompletion = dc;
481  }
482  else
483  {
484  /* hack alert - Use a neutral default. */
485  PERR("non-existent date completion set attempted. Setting current year completion as default");
486  dateCompletion = QOF_DATE_COMPLETION_THISYEAR;
487  }
488 
489  if (backmonths < 0)
490  {
491  backmonths = 0;
492  }
493  else if (backmonths > 11)
494  {
495  backmonths = 11;
496  }
497  dateCompletionBackMonths = backmonths;
498 
499  return;
500 }
#define PERR(format, args...)
Log a serious error.
Definition: qoflog.h:244
use sliding 12-month window
Definition: gnc-date.h:147
use current year
Definition: gnc-date.h:146

◆ qof_date_format_get()

QofDateFormat qof_date_format_get ( void  )

The qof_date_format_get routine returns the date format that the date printing will use when printing a date, and the scanning routines will assume when parsing a date.

Returns
: the one of the enumerated date formats.

Definition at line 437 of file gnc-date.cpp.

438 {
439  return dateFormat;
440 }

◆ qof_date_format_get_string()

const gchar* qof_date_format_get_string ( QofDateFormat  df)

This function returns a strftime formatting string for printing an all numeric date (e.g.

2005-09-14). The string returned is based upon the location specified.

Parameters
dfThe date style (us, uk, iso, etc) that should be provided.
Returns
A formatting string that will print a date in the requested style

Definition at line 509 of file gnc-date.cpp.

510 {
511  switch (df)
512  {
513  case QOF_DATE_FORMAT_US:
514  return "%m/%d/%Y";
515  case QOF_DATE_FORMAT_UK:
516  return "%d/%m/%Y";
517  case QOF_DATE_FORMAT_CE:
518  return "%d.%m.%Y";
519  case QOF_DATE_FORMAT_UTC:
520  return "%Y-%m-%dT%H:%M:%SZ";
521  case QOF_DATE_FORMAT_ISO:
522  return "%Y-%m-%d";
523  case QOF_DATE_FORMAT_UNSET: // use global
524  return qof_date_format_get_string (dateFormat);
526  default:
527  break;
528  };
529  return GNC_D_FMT;
530 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:133
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:132
No Fancy Date Format, use Global.
Definition: gnc-date.h:137
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:135
Take from locale information.
Definition: gnc-date.h:134
Britain: dd/mm/yyyy.
Definition: gnc-date.h:131
const gchar * qof_date_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing an all numeric date (e...
Definition: gnc-date.cpp:509
United states: mm/dd/yyyy.
Definition: gnc-date.h:130

◆ qof_date_format_set()

void qof_date_format_set ( QofDateFormat  df)

The qof_date_format_set() routine sets date format to one of US, UK, CE, OR ISO.

Checks to make sure it's a legal value. Args: QofDateFormat: enumeration indicating preferred format

Definition at line 442 of file gnc-date.cpp.

443 {
444  if (df >= DATE_FORMAT_FIRST && df <= DATE_FORMAT_LAST)
445  {
446  prevQofDateFormat = dateFormat;
447  dateFormat = df;
448  }
449  else
450  {
451  /* hack alert - Use a neutral default. */
452  PERR("non-existent date format set attempted. Setting ISO default");
453  prevQofDateFormat = dateFormat;
454  dateFormat = QOF_DATE_FORMAT_ISO;
455  }
456 
457  return;
458 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:133
#define PERR(format, args...)
Log a serious error.
Definition: qoflog.h:244

◆ qof_date_text_format_get_string()

const gchar* qof_date_text_format_get_string ( QofDateFormat  df)

This function returns a strftime formatting string for printing a date using words and numbers (e.g.

2005-September-14). The string returned is based upon the location specified.

Parameters
dfThe date style (us, uk, iso, etc) that should be provided.
Returns
A formatting string that will print a date in the requested style

Definition at line 532 of file gnc-date.cpp.

533 {
534  switch (df)
535  {
536  case QOF_DATE_FORMAT_US:
537  return "%b %d, %Y";
538  case QOF_DATE_FORMAT_UK:
539  case QOF_DATE_FORMAT_CE:
540  return "%d %b %Y";
541  case QOF_DATE_FORMAT_UTC:
542  return "%Y-%m-%dT%H:%M:%SZ";
543  case QOF_DATE_FORMAT_ISO:
544  return "%Y-%b-%d";
545  case QOF_DATE_FORMAT_UNSET: // use global
546  return qof_date_text_format_get_string (dateFormat);
548  default:
549  break;
550  };
551  return GNC_D_FMT;
552 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:133
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:132
No Fancy Date Format, use Global.
Definition: gnc-date.h:137
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:135
const gchar * qof_date_text_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing a date using words and numbers (e...
Definition: gnc-date.cpp:532
Take from locale information.
Definition: gnc-date.h:134
Britain: dd/mm/yyyy.
Definition: gnc-date.h:131
United states: mm/dd/yyyy.
Definition: gnc-date.h:130

◆ qof_print_date()

char* qof_print_date ( time64  secs)

Convenience; calls through to qof_print_date_dmy_buff().

Return: string, which should be freed when no longer needed.

Definition at line 617 of file gnc-date.cpp.

618 {
619  char buff[MAX_DATE_LENGTH + 1];
620  memset (buff, 0, sizeof (buff));
622  return g_strdup (buff);
623 }
#define MAX_DATE_LENGTH
The maximum length of a string created by the date printers.
Definition: gnc-date.h:114
size_t qof_print_date_buff(char *buff, size_t buflen, time64 secs)
Convenience: calls through to qof_print_date_dmy_buff().
Definition: gnc-date.cpp:581

◆ qof_print_date_buff()

size_t qof_print_date_buff ( char *  buff,
size_t  buflen,
time64  secs 
)

Convenience: calls through to qof_print_date_dmy_buff().

Definition at line 581 of file gnc-date.cpp.

582 {
583  if (!buff) return 0;
584 
585  try
586  {
587  GncDateTime gncdt(t);
588  std::string str = gncdt.format(qof_date_format_get_string(dateFormat));
589  strncpy(buff, str.c_str(), len);
590  if (str.length() >= len)
591  buff[len - 1] = '\0';
592  }
593  catch(std::logic_error& err)
594  {
595  PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
596  }
597  catch(std::runtime_error& err)
598  {
599  PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
600  }
601  return strlen(buff);
602 }
GnuCash DateTime class.
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
const gchar * qof_date_format_get_string(QofDateFormat df)
This function returns a strftime formatting string for printing an all numeric date (e...
Definition: gnc-date.cpp:509

◆ qof_print_date_dmy_buff()

size_t qof_print_date_dmy_buff ( gchar *  buff,
size_t  buflen,
int  day,
int  month,
int  year 
)

qof_print_date_dmy_buff Convert a date as day / month / year integers into a localized string representation

Args: buff - pointer to previously allocated character array; its size must be at lease MAX_DATE_LENTH bytes. len - length of the buffer, in bytes. day - day of the month as 1 ... 31 month - month of the year as 1 ... 12 year - year (4-digit)

Returns: number of characters printed

Globals: global dateFormat value

◆ qof_print_gdate()

size_t qof_print_gdate ( char *  buf,
size_t  bufflen,
const GDate *  gd 
)

Convenience; calls through to qof_print_date_dmy_buff().

Definition at line 605 of file gnc-date.cpp.

606 {
607  GDate date;
608  g_date_clear (&date, 1);
609  date = *gd;
610  return qof_print_date_dmy_buff( buf, len,
611  g_date_get_day(&date),
612  g_date_get_month(&date),
613  g_date_get_year(&date) );
614 }
size_t qof_print_date_dmy_buff(gchar *buff, size_t buflen, int day, int month, int year)
qof_print_date_dmy_buff Convert a date as day / month / year integers into a localized string represe...

◆ qof_scan_date()

gboolean qof_scan_date ( const char *  buff,
int *  day,
int *  month,
int *  year 
)

qof_scan_date Convert a string into day / month / year integers according to the current dateFormat value.

Args: buff - pointer to date string day - will store day of the month as 1 ... 31 month - will store month of the year as 1 ... 12 year - will store the year (4-digit)

Return: TRUE if the string seemed to be a valid date; else FALSE.

Globals: uses global dateFormat value to assist in parsing.

Definition at line 920 of file gnc-date.cpp.

921 {
922  return qof_scan_date_internal(buff, day, month, year, dateFormat);
923 }

◆ qof_strftime()

gsize qof_strftime ( gchar *  buf,
gsize  max,
const gchar *  format,
const struct tm *  tm 
)

qof_strftime calls qof_format_time to print a given time and afterwards tries to put the result into a buffer of fixed size.

Warning
HACK ALERT – the scan and print routines should probably be moved to somewhere else. The engine really isn't involved with things like printing formats. This is needed mostly by the GUI and so on. If a file-io thing needs date handling, it should do it itself, instead of depending on the routines here.
Parameters
bufA buffer.
maxThe size of buf in bytes.
formatA format specification in UTF-8.
tmA broken-down time.
Returns
The number of characters written, not include the null byte, if the complete string, including the null byte, fits into the buffer. Otherwise 0.

Definition at line 1058 of file gnc-date.cpp.

1059 {
1060  gsize convlen, retval;
1061  gchar *convbuf;
1062 
1063  g_return_val_if_fail(buf, 0);
1064  g_return_val_if_fail(max > 0, 0);
1065  g_return_val_if_fail(format, 0);
1066  g_return_val_if_fail(tm, 0);
1067 
1068  convbuf = qof_format_time(format, tm);
1069  if (!convbuf)
1070  {
1071  buf[0] = '\0';
1072  return 0;
1073  }
1074 
1075  convlen = strlen(convbuf);
1076 
1077  if (max <= convlen)
1078  {
1079  /* Ensure only whole characters are copied into the buffer. */
1080  gchar *end = g_utf8_find_prev_char(convbuf, convbuf + max);
1081  g_assert(end != NULL);
1082  convlen = end - convbuf;
1083 
1084  /* Return 0 because the buffer isn't large enough. */
1085  retval = 0;
1086  }
1087  else
1088  {
1089  retval = convlen;
1090  }
1091 
1092  memcpy(buf, convbuf, convlen);
1093  buf[convlen] = '\0';
1094  g_free(convbuf);
1095 
1096  return retval;
1097 }

◆ time64_to_gdate()

GDate time64_to_gdate ( time64  t)

Returns the GDate in which the time64 occurs.

Parameters
tThe time64
Returns
A GDate for the day in which the time64 occurs.

Definition at line 1215 of file gnc-date.cpp.

1216 {
1217  GDate result;
1218 
1219  g_date_clear (&result, 1);
1220  GncDateTime time(t);
1221  auto date = time.date().year_month_day();
1222  g_date_set_dmy (&result, date.day, static_cast<GDateMonth>(date.month),
1223  date.year);
1224  g_assert(g_date_valid (&result));
1225 
1226  return result;
1227 }
GnuCash DateTime class.