GRASS 8 Programmer's Manual
8.5.0(2026)-8d6ceba290
Toggle main menu visibility
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
*/
28
int
datetime_get_local_timezone
(
int
*minutes)
29
{
30
struct
tm *local, *gm;
31
time_t clock;
32
DateTime dtl, dtg, dtdiff;
33
34
time(&clock);
35
36
local = localtime(&clock);
37
38
datetime_set_type
(&dtl, DATETIME_ABSOLUTE, DATETIME_YEAR, DATETIME_SECOND,
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
51
datetime_set_type
(&dtg, DATETIME_ABSOLUTE, DATETIME_YEAR, DATETIME_SECOND,
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
62
datetime_set_type
(&dtdiff, DATETIME_RELATIVE, DATETIME_DAY, DATETIME_SECOND,
63
0);
64
datetime_difference
(&dtl, &dtg, &dtdiff);
65
datetime_change_from_to
(&dtdiff, DATETIME_MINUTE, DATETIME_MINUTE, 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
*/
80
void
datetime_get_local_time
(DateTime *dt)
81
{
82
time_t clock;
83
struct
tm *local;
84
85
/* first set dt to absolute full date */
86
datetime_set_type
(dt, DATETIME_ABSOLUTE, DATETIME_YEAR, DATETIME_SECOND, 0);
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
}
datetime_change_from_to
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
datetime_difference
int datetime_difference(const DateTime *a, const DateTime *b, DateTime *result)
This performs the formula: result = a - b;.
Definition
diff.c:78
datetime_get_local_time
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
datetime_get_local_timezone
int datetime_get_local_timezone(int *minutes)
Returns: 0 OK -1 local timezone info not available.
Definition
local.c:28
datetime_set_type
int datetime_set_type(DateTime *dt, int mode, int from, int to, int fracsec)
Definition
type.c:36
datetime_set_day
int datetime_set_day(DateTime *dt, int day)
if dt.mode = ABSOLUTE, then the dt.year, dt.month:
Definition
values.c:327
datetime_set_month
int datetime_set_month(DateTime *dt, int month)
if dt.mode = ABSOLUTE, this also sets dt.day = 0
Definition
values.c:277
datetime_set_hour
int datetime_set_hour(DateTime *dt, int hour)
returns 0 on success or negative value on error
Definition
values.c:367
datetime_set_year
int datetime_set_year(DateTime *dt, int year)
if dt.mode = ABSOLUTE, this also sets dt.day = 0
Definition
values.c:232
datetime_set_second
int datetime_set_second(DateTime *dt, double second)
returns 0 on success or negative value on error
Definition
values.c:447
datetime_set_minute
int datetime_set_minute(DateTime *dt, int minute)
returns 0 on success or negative value on error
Definition
values.c:407
datetime
local.c
Generated on
for GRASS 8 Programmer's Manual by
1.17.0