GRASS 8 Programmer's Manual 8.6.0dev(2026)-5f4f7ad06c
Loading...
Searching...
No Matches
local.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 1995. Bill Brown <brown@gis.uiuc.edu> & Michael Shapiro
3 *
4 * This program is free software under the GPL (>=v2)
5 * Read the file GPL.TXT coming with GRASS for details.
6 */
7#include <time.h>
8#include <grass/datetime.h>
9
10/*
11 ** NOTE: the extern variable "timezone" seems to be treated
12 ** differently by different OS, and the tm_zone element of struct tm
13 ** is missing in some OS (IRIX), so we're converting localtime() and
14 ** gmtime() structures to datetimes, then doing a difference to get the
15 ** timezone offset. -Bill Brown 5/31/95
16 */
17
18/*!
19 * \brief
20 *
21 * Returns:
22 * 0 OK
23 * -1 local timezone info not available
24 *
25 * \param minutes
26 * \return int
27 */
29{
30 struct tm *local, *gm;
31 time_t clock;
33
34 time(&clock);
35
36 local = localtime(&clock);
37
39 0);
40
41 /* now put current {year,month,day,hour,minute,second} into local */
42 datetime_set_year(&dtl, (int)local->tm_year + 1900);
43 datetime_set_month(&dtl, (int)local->tm_mon + 1);
44 datetime_set_day(&dtl, (int)local->tm_mday);
45 datetime_set_hour(&dtl, (int)local->tm_hour);
46 datetime_set_minute(&dtl, (int)local->tm_min);
47 datetime_set_second(&dtl, (double)local->tm_sec);
48
49 gm = gmtime(&clock);
50
52 0);
53
54 /* now put current {year,month,day,hour,minute,second} into gmt */
55 datetime_set_year(&dtg, (int)gm->tm_year + 1900);
56 datetime_set_month(&dtg, (int)gm->tm_mon + 1);
57 datetime_set_day(&dtg, (int)gm->tm_mday);
58 datetime_set_hour(&dtg, (int)gm->tm_hour);
59 datetime_set_minute(&dtg, (int)gm->tm_min);
60 datetime_set_second(&dtg, (double)gm->tm_sec);
61
63 0);
66
67 *minutes = dtdiff.positive ? dtdiff.minute : -dtdiff.minute;
68 return 0;
69}
70
71/*!
72 * \brief
73 *
74 * set mode/from/to ABSOLUTE/YEAR/SECOND
75 * set the local time into 'dt' does not set timezone.
76 *
77 * \param dt
78 * \return void
79 */
81{
82 time_t clock;
83 struct tm *local;
84
85 /* first set dt to absolute full date */
87
88 /* get the current date/time */
89 time(&clock);
90 local = localtime(&clock);
91
92 /* now put current {year,month,day,hour,minute,second} into dt */
93 datetime_set_year(dt, (int)local->tm_year + 1900);
94 datetime_set_month(dt, (int)local->tm_mon + 1);
95 datetime_set_day(dt, (int)local->tm_mday);
96 datetime_set_hour(dt, (int)local->tm_hour);
97 datetime_set_minute(dt, (int)local->tm_min);
98 datetime_set_second(dt, (double)local->tm_sec);
99}
#define DATETIME_ABSOLUTE
Definition datetime.h:4
#define DATETIME_DAY
Definition datetime.h:12
#define DATETIME_SECOND
Definition datetime.h:15
#define DATETIME_MINUTE
Definition datetime.h:14
#define DATETIME_RELATIVE
Definition datetime.h:5
#define DATETIME_YEAR
Definition datetime.h:10
int datetime_difference(const DateTime *a, const DateTime *b, DateTime *result)
This performs the formula: result = a - b;.
Definition diff.c:78
int datetime_set_day(DateTime *dt, int day)
if dt.mode = ABSOLUTE, then the dt.year, dt.month:
Definition values.c:327
int datetime_set_month(DateTime *dt, int month)
if dt.mode = ABSOLUTE, this also sets dt.day = 0
Definition values.c:277
int datetime_set_type(DateTime *dt, int mode, int from, int to, int fracsec)
int datetime_set_hour(DateTime *dt, int hour)
returns 0 on success or negative value on error
Definition values.c:367
int datetime_set_year(DateTime *dt, int year)
if dt.mode = ABSOLUTE, this also sets dt.day = 0
Definition values.c:232
int datetime_set_second(DateTime *dt, double second)
returns 0 on success or negative value on error
Definition values.c:447
int datetime_change_from_to(DateTime *dt, int from, int to, int round)
Changes the from/to of the type for dt. The 'from/to' must be legal values for the mode of dt; (if th...
Definition change.c:53
int datetime_set_minute(DateTime *dt, int minute)
returns 0 on success or negative value on error
Definition values.c:407
void datetime_get_local_time(DateTime *dt)
set mode/from/to ABSOLUTE/YEAR/SECOND set the local time into 'dt' does not set timezone.
Definition local.c:80
int datetime_get_local_timezone(int *minutes)
Returns: 0 OK -1 local timezone info not available.
Definition local.c:28