Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
datetime.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2011, 2014 johannes hanika.
4 Copyright (C) 2012 Richard Wonka.
5 Copyright (C) 2014-2016 Pedro Côrte-Real.
6 Copyright (C) 2014, 2016 Tobias Ellinghaus.
7 Copyright (C) 2020 Pascal Obry.
8 Copyright (C) 2021 Daniel Vogelbacher.
9 Copyright (C) 2022 Aldric Renaudin.
10 Copyright (C) 2022 Martin Bařinka.
11 Copyright (C) 2022 Philippe Weyland.
12 Copyright (C) 2024 Guillaume Stutin.
13 Copyright (C) 2025 Alynx Zhou.
14
15 darktable is free software: you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 3 of the License, or
18 (at your option) any later version.
19
20 darktable is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with darktable. If not, see <http://www.gnu.org/licenses/>.
27*/
28#ifndef DT_COMMON_DATETIME_H
29#define DT_COMMON_DATETIME_H
30
31#include <glib.h>
32#include "common/image.h"
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38#define DT_DATETIME_LENGTH 24 // includes msec
39#define DT_DATETIME_EXIF_LENGTH 20 // exif format string length
40
41// The GTimeSpan saved in db is an offset to datetime_origin (0001:01:01 00:00:00)
42// Datetime_taken is to be displayed and stored in XMP without time zone conversion
43// The other timestamps consider the timezone (GTimeSpan converted from local to UTC)
44// The text format of datetime follows the exif format except when local format
45
46typedef struct dt_datetime_t
47{
48 gint year;
49 gint month;
50 gint day;
51 gint hour;
52 gint minute;
53 gint second;
54 gint msec;
56
57// initialize datetime
58void dt_datetime_init(void);
59
62GTimeZone *dt_datetime_utc_tz(void);
63// the datetime origin (0001:01:01 00:00:00) GTimeSpans in db are offsets from
64GDateTime *dt_datetime_origin(void);
65
66GDateTime *dt_string_to_datetime(const char *string);
67
68// exif datetime to numbers. Returns TRUE if OK.
69gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif);
70
71// gtimespan to display local string. Returns TRUE if OK.
72gboolean dt_datetime_gtimespan_to_local(char *local, const size_t local_size,
73 const GTimeSpan gts, const gboolean msec, const gboolean tz);
74// gdatetime to display local string. Returns TRUE if OK.
75gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size,
76 GDateTime *gdt, const gboolean msec, const gboolean tz);
77
78// exif datetime to numbers without any check about validity of fields. return TRUE of OK.
79gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif);
80
81// img cache datetime to display local string. Returns TRUE if OK.
82gboolean dt_datetime_img_to_local(char *local, const size_t local_size,
83 const dt_image_t *img, const gboolean msec);
84
85// unix datetime to img cache datetime
86gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix);
87// unix datetime to exif datetime
88gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix);
89
90// now to exif
91void dt_datetime_now_to_exif(char *exif);
92// now to gtimespan
93GTimeSpan dt_datetime_now_to_gtimespan(void);
94
95// exif datetime to img cache datetime
96void dt_datetime_exif_to_img(dt_image_t *img, const char *exif);
97// img cache datetime to exif datetime
98gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img);
99
100// exif datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
101GDateTime *dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz);
102// GDateTime to exif datetime.
103gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt);
104
105// img cache datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
106GDateTime *dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz);
107
108// progressive manual entry datetime to exif datetime
109gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry);
110// progressive manual entry datetime to exif datetime bound
111gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry);
112
113// add subsec (decimal numbers) to exif datetime
114void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char*subsec);
115
116// gtimespan to exif datetime
117gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts);
118// exif datetime to gtimespan
119GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt);
120
121// gtimepsan to datetime numbers
122gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts);
123// datetime numbers to gtimespan
125
126// gdatetime to gtimespan
127GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt);
128// gtimespan to gdatetime
129GDateTime *dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts);
130
131// add values (represented by dt_datetime_t) to gdatetime
132GDateTime *dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add);
133
134// add values (represented by dt_datetime_t) to unix datetime
135GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add);
136
137// add values (represented by dt_datetime_t) to exif datetime
138gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add,
139 gchar **result);
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif // DT_COMMON_DATETIME_H
146
147// clang-format off
148// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
149// vim: shiftwidth=2 expandtab tabstop=2 cindent
150// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
151// clang-format on
152
GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt)
Definition datetime.c:420
gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img)
Definition datetime.c:255
gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt)
Definition datetime.c:281
gboolean dt_datetime_gtimespan_to_local(char *local, const size_t local_size, const GTimeSpan gts, const gboolean msec, const gboolean tz)
Definition datetime.c:178
void dt_datetime_now_to_exif(char *exif)
Definition datetime.c:225
void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char *subsec)
Definition datetime.c:395
GTimeSpan dt_datetime_now_to_gtimespan(void)
Definition datetime.c:237
void dt_datetime_init(void)
Definition datetime.c:34
GDateTime * dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz)
Definition datetime.c:260
GTimeZone * dt_datetime_utc_tz(void)
Definition datetime.c:40
GDateTime * dt_datetime_origin(void)
Definition datetime.c:45
GTimeSpan dt_datetime_numbers_to_gtimespan(const dt_datetime_t *dt)
Definition datetime.c:450
gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix)
Definition datetime.c:199
GDateTime * dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:467
GDateTime * dt_string_to_datetime(const char *string)
Definition datetime.c:321
gboolean dt_datetime_img_to_local(char *local, const size_t local_size, const dt_image_t *img, const gboolean msec)
Definition datetime.c:193
gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add, gchar **result)
Definition datetime.c:495
GDateTime * dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts)
Definition datetime.c:445
gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts)
Definition datetime.c:405
GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt)
Definition datetime.c:459
gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts)
Definition datetime.c:433
gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif)
Definition datetime.c:82
GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:485
gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size, GDateTime *gdt, const gboolean msec, const gboolean tz)
Definition datetime.c:146
gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif)
Definition datetime.c:118
void dt_datetime_exif_to_img(dt_image_t *img, const char *exif)
Definition datetime.c:243
gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:348
gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix)
Definition datetime.c:212
gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:333
GDateTime * dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz)
Definition datetime.c:302