GnuCash  5.6-150-g038405b370+
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
 

Typedefs

typedef gint64 time64
 Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux, support 64-bit time_t even on 32-bit architectures. 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 time More...
 
gdouble gnc_difftime (const time64 secs1, const time64 secs2)
 Find the difference in seconds between two time values (deprecated) 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 926 of file gnc-date.cpp.

927 {
928  static char locale_separator = '\0';
929 
930  switch (dateFormat)
931  {
932  case QOF_DATE_FORMAT_CE:
933  return '.';
934  case QOF_DATE_FORMAT_ISO:
935  case QOF_DATE_FORMAT_UTC:
936  return '-';
937  case QOF_DATE_FORMAT_US:
938  case QOF_DATE_FORMAT_UK:
939  default:
940  return '/';
942  if (locale_separator != '\0')
943  return locale_separator;
944  else
945  {
946  /* Make a guess */
947  gchar string[256];
948  struct tm tm;
949  time64 secs;
950  gchar *s;
951 
952  secs = gnc_time (nullptr);
953  gnc_localtime_r(&secs, &tm);
954  auto normalized_fmt =
955  normalize_format(qof_date_format_get_string(dateFormat));
956  qof_strftime(string, sizeof(string), normalized_fmt.c_str(), &tm);
957 
958  for (s = string; *s != '\0'; s++)
959  if (!isdigit(*s))
960  return (locale_separator = *s);
961  }
962  break;
963  }
964  return '\0';
965 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:127
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:1056
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:126
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:114
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:129
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition: gnc-date.h:87
Take from locale information.
Definition: gnc-date.h:128
Britain: dd/mm/yyyy.
Definition: gnc-date.h:125
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:501
United states: mm/dd/yyyy.
Definition: gnc-date.h:124

◆ 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 412 of file gnc-date.cpp.

413 {
414  static int last_day_of_month[12] =
415  {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
416 
417  g_assert(month >= 0 && month < 12);
418 
419  // To be a leap year, the year number must be divisible by four,
420  // except for end-of-century years, which must be divisible by 400.
421 
422  return last_day_of_month[month] +
423  (month == 1 && year % 4 == 0 && !(year % 100 == 0 && year % 400 != 0) ?
424  1 : 0);
425 }

◆ 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 1101 of file gnc-date.cpp.

1102 {
1103  auto timestamp = GncDateTime::timestamp();
1104  return g_strdup(timestamp.c_str());
1105 }
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 1365 of file gnc-date.cpp.

1366 {
1367  struct tm my_tm;
1368  int i;
1369 
1370  memset(buf, 0, buf_len);
1371  memset(&my_tm, 0, sizeof(struct tm));
1372  my_tm.tm_wday = dow;
1373  i = qof_strftime(buf, buf_len, "%a", &my_tm);
1374  buf[i] = 0;
1375 }
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:1056

◆ 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 1401 of file gnc-date.cpp.

1402 {
1403  return (g_date_compare( (GDate*)gda, (GDate*)gdb ) == 0 ? TRUE : FALSE);
1404 }

◆ 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 1407 of file gnc-date.cpp.

1408 {
1409  gint val = (g_date_get_year( (GDate*)gd ) * 10000)
1410  + (g_date_get_month( (GDate*)gd ) * 100)
1411  + g_date_get_day( (GDate*)gd );
1412  return g_int_hash( &val );
1413 }

◆ 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 1604 of file gnc-date.cpp.

1606 {
1607  GDate temp;
1608  gboolean new_fy;
1609 
1610  g_return_if_fail(date);
1611  g_return_if_fail(fy_end);
1612 
1613  /* Compute the FY end that occurred this CY */
1614  temp = *fy_end;
1615  g_date_set_year(&temp, g_date_get_year(date));
1616 
1617  /* Has it already passed? */
1618  new_fy = (g_date_compare(date, &temp) > 0);
1619 
1620  /* Set end date */
1621  *date = temp;
1622  if (new_fy)
1623  g_date_add_years(date, 1);
1624 }

◆ 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 1580 of file gnc-date.cpp.

1582 {
1583  GDate temp;
1584  gboolean new_fy;
1585 
1586  g_return_if_fail(date);
1587  g_return_if_fail(fy_end);
1588 
1589  /* Compute the FY end that occurred this CY */
1590  temp = *fy_end;
1591  g_date_set_year(&temp, g_date_get_year(date));
1592 
1593  /* Has it already passed? */
1594  new_fy = (g_date_compare(date, &temp) > 0);
1595 
1596  /* Set start date */
1597  *date = temp;
1598  g_date_add_days(date, 1);
1599  if (!new_fy)
1600  g_date_subtract_years(date, 1);
1601 }

◆ 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 1467 of file gnc-date.cpp.

1468 {
1469  /* First set the start of next month. */
1470  g_date_set_day(date, 1);
1471  g_date_add_months(date, 1);
1472 
1473  /* Then back up one day */
1474  g_date_subtract_days(date, 1);
1475 }

◆ 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 1454 of file gnc-date.cpp.

1455 {
1456  g_date_set_day(date, 1);
1457 }

◆ 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 1638 of file gnc-date.cpp.

1640 {
1641  g_return_if_fail(date);
1642  g_return_if_fail(fy_end);
1643 
1644  gnc_gdate_set_fiscal_year_end(date, fy_end);
1645  g_date_subtract_years(date, 1);
1646 }
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:1604

◆ 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 1627 of file gnc-date.cpp.

1629 {
1630  g_return_if_fail(date);
1631  g_return_if_fail(fy_end);
1632 
1633  gnc_gdate_set_fiscal_year_start(date, fy_end);
1634  g_date_subtract_years(date, 1);
1635 }
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:1580

◆ 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 1499 of file gnc-date.cpp.

1500 {
1501  /* This will correctly handle the varying month lengths */
1502  g_date_set_day(date, 1);
1503  g_date_subtract_days(date, 1);
1504 }

◆ 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 1485 of file gnc-date.cpp.

1486 {
1487  g_date_set_day(date, 1);
1488  g_date_subtract_months(date, 1);
1489 }

◆ 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 1541 of file gnc-date.cpp.

1542 {
1543  g_date_subtract_months(date, 3);
1545 }
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:1522

◆ 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 1534 of file gnc-date.cpp.

1535 {
1536  g_date_subtract_months(date, 3);
1538 }
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:1509

◆ 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 1571 of file gnc-date.cpp.

1572 {
1573  gnc_gdate_set_year_end(date);
1574  g_date_subtract_years(date, 1);
1575 }
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:1557

◆ 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 1564 of file gnc-date.cpp.

1565 {
1567  g_date_subtract_years(date, 1);
1568 }
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:1550

◆ 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 1522 of file gnc-date.cpp.

1523 {
1524  const GDateMonth months[] = {G_DATE_MARCH, G_DATE_JUNE,
1525  G_DATE_SEPTEMBER, G_DATE_DECEMBER};
1526  const GDateDay days[] = {31, 30, 30, 31};
1527  int quarter = (g_date_get_month (date) - 1) / 3;
1528 
1529  g_date_set_month (date, months[quarter]);
1530  g_date_set_day (date, days[quarter]);
1531 }

◆ 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 1509 of file gnc-date.cpp.

1510 {
1511  gint months;
1512 
1513  /* Set the date to the first day of the specified month. */
1514  g_date_set_day(date, 1);
1515 
1516  /* Back up 0-2 months */
1517  months = (g_date_get_month(date) - G_DATE_JANUARY) % 3;
1518  g_date_subtract_months(date, months);
1519 }

◆ 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 1557 of file gnc-date.cpp.

1558 {
1559  g_date_set_month(date, G_DATE_DECEMBER);
1560  g_date_set_day(date, 31);
1561 }

◆ 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 1550 of file gnc-date.cpp.

1551 {
1552  g_date_set_month(date, G_DATE_JANUARY);
1553  g_date_set_day(date, 1);
1554 }

◆ 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 1316 of file gnc-date.cpp.

1317 {
1318  struct tm tm;
1319  time64 new_time;
1320 
1321  gnc_tm_get_day_end(&tm, time_val);
1322  new_time = gnc_mktime(&tm);
1323  return new_time;
1324 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:218
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition: gnc-date.h:87

◆ 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 1307 of file gnc-date.cpp.

1308 {
1309  struct tm tm;
1310  gnc_localtime_r(&time_val, &tm);
1311  return gnc_dmy2time64_internal(tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900,
1312  DayPart::neutral);
1313 }
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:114

◆ 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 1296 of file gnc-date.cpp.

1297 {
1298  struct tm tm;
1299  time64 new_time;
1300 
1301  gnc_tm_get_day_start(&tm, time_val);
1302  new_time = gnc_mktime(&tm);
1303  return new_time;
1304 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:218
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition: gnc-date.h:87

◆ 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 1356 of file gnc-date.cpp.

1357 {
1358  struct tm tm;
1359 
1360  gnc_tm_get_day_end(&tm, gnc_time(nullptr));
1361  return gnc_mktime(&tm);
1362 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:218
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ 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 1347 of file gnc-date.cpp.

1348 {
1349  struct tm tm;
1350 
1351  gnc_tm_get_day_start(&tm, gnc_time(nullptr));
1352  return gnc_mktime(&tm);
1353 }
time64 gnc_mktime(struct tm *time)
calculate seconds from the epoch given a time struct
Definition: gnc-date.cpp:218
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ 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 1341 of file gnc-date.cpp.

1342 {
1343  gnc_tm_get_day_end(tm, gnc_time(nullptr));
1344 }
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ 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 1335 of file gnc-date.cpp.

1336 {
1337  gnc_tm_get_day_neutral(tm, gnc_time(nullptr));
1338 }
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ 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 1329 of file gnc-date.cpp.

1330 {
1331  gnc_tm_get_day_start(tm, gnc_time(nullptr));
1332 }
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ 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 467 of file gnc-date.cpp.

468 {
469  if (dc == QOF_DATE_COMPLETION_THISYEAR ||
471  {
472  dateCompletion = dc;
473  }
474  else
475  {
476  /* hack alert - Use a neutral default. */
477  PERR("non-existent date completion set attempted. Setting current year completion as default");
478  dateCompletion = QOF_DATE_COMPLETION_THISYEAR;
479  }
480 
481  if (backmonths < 0)
482  {
483  backmonths = 0;
484  }
485  else if (backmonths > 11)
486  {
487  backmonths = 11;
488  }
489  dateCompletionBackMonths = backmonths;
490 
491  return;
492 }
#define PERR(format, args...)
Log a serious error.
Definition: qoflog.h:244
use sliding 12-month window
Definition: gnc-date.h:141
use current year
Definition: gnc-date.h:140

◆ 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 427 of file gnc-date.cpp.

428 {
429  return dateFormat;
430 }

◆ 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 501 of file gnc-date.cpp.

502 {
503  switch (df)
504  {
505  case QOF_DATE_FORMAT_US:
506  return "%m/%d/%Y";
507  case QOF_DATE_FORMAT_UK:
508  return "%d/%m/%Y";
509  case QOF_DATE_FORMAT_CE:
510  return "%d.%m.%Y";
511  case QOF_DATE_FORMAT_UTC:
512  return "%Y-%m-%dT%H:%M:%SZ";
513  case QOF_DATE_FORMAT_ISO:
514  return "%Y-%m-%d";
515  case QOF_DATE_FORMAT_UNSET: // use global
516  return qof_date_format_get_string (dateFormat);
518  default:
519  break;
520  };
521  return GNC_D_FMT;
522 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:127
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:126
No Fancy Date Format, use Global.
Definition: gnc-date.h:131
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:129
Take from locale information.
Definition: gnc-date.h:128
Britain: dd/mm/yyyy.
Definition: gnc-date.h:125
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:501
United states: mm/dd/yyyy.
Definition: gnc-date.h:124

◆ 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 432 of file gnc-date.cpp.

433 {
434 //avoid UB if df is out of range
435  auto dfi{static_cast<uint8_t>(df)};
436  if (dfi >= DATE_FORMAT_FIRST && dfi <= DATE_FORMAT_LAST)
437  {
438  prevQofDateFormat = dateFormat;
439  dateFormat = df;
440  }
441  else
442  {
443  /* hack alert - Use a neutral default. */
444  PERR("non-existent date format set attempted. Setting ISO default");
445  prevQofDateFormat = dateFormat;
446  dateFormat = QOF_DATE_FORMAT_ISO;
447  }
448 
449  return;
450 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:127
#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 524 of file gnc-date.cpp.

525 {
526  switch (df)
527  {
528  case QOF_DATE_FORMAT_US:
529  return "%b %d, %Y";
530  case QOF_DATE_FORMAT_UK:
531  case QOF_DATE_FORMAT_CE:
532  return "%d %b %Y";
533  case QOF_DATE_FORMAT_UTC:
534  return "%Y-%m-%dT%H:%M:%SZ";
535  case QOF_DATE_FORMAT_ISO:
536  return "%Y-%b-%d";
537  case QOF_DATE_FORMAT_UNSET: // use global
538  return qof_date_text_format_get_string (dateFormat);
540  default:
541  break;
542  };
543  return GNC_D_FMT;
544 }
ISO: yyyy-mm-dd.
Definition: gnc-date.h:127
Continental Europe: dd.mm.yyyy.
Definition: gnc-date.h:126
No Fancy Date Format, use Global.
Definition: gnc-date.h:131
UTC: 2004-12-12T23:39:11Z.
Definition: gnc-date.h:129
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:524
Take from locale information.
Definition: gnc-date.h:128
Britain: dd/mm/yyyy.
Definition: gnc-date.h:125
United states: mm/dd/yyyy.
Definition: gnc-date.h:124

◆ 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 609 of file gnc-date.cpp.

610 {
611  char buff[MAX_DATE_LENGTH + 1];
612  memset (buff, 0, sizeof (buff));
614  return g_strdup (buff);
615 }
#define MAX_DATE_LENGTH
The maximum length of a string created by the date printers.
Definition: gnc-date.h:108
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:573

◆ 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 573 of file gnc-date.cpp.

574 {
575  if (!buff) return 0;
576 
577  try
578  {
579  GncDateTime gncdt(t);
580  std::string str = gncdt.format(qof_date_format_get_string(dateFormat));
581  strncpy(buff, str.c_str(), len);
582  if (str.length() >= len)
583  buff[len - 1] = '\0';
584  }
585  catch(std::logic_error& err)
586  {
587  PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
588  }
589  catch(std::runtime_error& err)
590  {
591  PWARN("Error processing time64 %" PRId64 ": %s", t, err.what());
592  }
593  return strlen(buff);
594 }
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:501

◆ 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 597 of file gnc-date.cpp.

598 {
599  GDate date;
600  g_date_clear (&date, 1);
601  date = *gd;
602  return qof_print_date_dmy_buff( buf, len,
603  g_date_get_day(&date),
604  g_date_get_month(&date),
605  g_date_get_year(&date) );
606 }
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 918 of file gnc-date.cpp.

919 {
920  return qof_scan_date_internal(buff, day, month, year, dateFormat);
921 }

◆ 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 1056 of file gnc-date.cpp.

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

◆ 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 1211 of file gnc-date.cpp.

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