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#pragma once
29
30#include <glib.h>
31#include "common/image.h"
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37#define DT_DATETIME_LENGTH 24 // includes msec
38#define DT_DATETIME_EXIF_LENGTH 20 // exif format string length
39
40// The GTimeSpan saved in db is an offset to datetime_origin (0001:01:01 00:00:00)
41// Datetime_taken is to be displayed and stored in XMP without time zone conversion
42// The other timestamps consider the timezone (GTimeSpan converted from local to UTC)
43// The text format of datetime follows the exif format except when local format
44
45typedef struct dt_datetime_t
46{
47 gint year;
48 gint month;
49 gint day;
50 gint hour;
51 gint minute;
52 gint second;
53 gint msec;
55
56// initialize datetime
57void dt_datetime_init(void);
58
59GDateTime *dt_string_to_datetime(const char *string);
60
61// exif datetime to numbers. Returns TRUE if OK.
62gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif);
63
64// gtimespan to display local string. Returns TRUE if OK.
65gboolean dt_datetime_gtimespan_to_local(char *local, const size_t local_size,
66 const GTimeSpan gts, const gboolean msec, const gboolean tz);
67// gdatetime to display local string. Returns TRUE if OK.
68gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size,
69 GDateTime *gdt, const gboolean msec, const gboolean tz);
70
71// exif datetime to numbers without any check about validity of fields. return TRUE of OK.
72gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif);
73
74// img cache datetime to display local string. Returns TRUE if OK.
75gboolean dt_datetime_img_to_local(char *local, const size_t local_size,
76 const dt_image_t *img, const gboolean msec);
77
78// unix datetime to img cache datetime
79gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix);
80// unix datetime to exif datetime
81gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix);
82
83// now to exif
84void dt_datetime_now_to_exif(char *exif);
85// now to gtimespan
86GTimeSpan dt_datetime_now_to_gtimespan(void);
87
88// exif datetime to img cache datetime
89void dt_datetime_exif_to_img(dt_image_t *img, const char *exif);
90// img cache datetime to exif datetime
91gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img);
92
93// exif datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
94GDateTime *dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz);
95// GDateTime to exif datetime.
96gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt);
97
98// img cache datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
99GDateTime *dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz);
100
101// progressive manual entry datetime to exif datetime
102gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry);
103// progressive manual entry datetime to exif datetime bound
104gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry);
105
106// add subsec (decimal numbers) to exif datetime
107void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char*subsec);
108
109// gtimespan to exif datetime
110gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts);
111// exif datetime to gtimespan
112GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt);
113
114// gtimepsan to datetime numbers
115gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts);
116// datetime numbers to gtimespan
118
119// gdatetime to gtimespan
120GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt);
121// gtimespan to gdatetime
122GDateTime *dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts);
123
124// add values (represented by dt_datetime_t) to gdatetime
125GDateTime *dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add);
126
127// add values (represented by dt_datetime_t) to unix datetime
128GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add);
129
130// add values (represented by dt_datetime_t) to exif datetime
131gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add,
132 gchar **result);
133
134#ifdef __cplusplus
135}
136#endif
137
138// clang-format off
139// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
140// vim: shiftwidth=2 expandtab tabstop=2 cindent
141// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
142// clang-format on
143
GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt)
Definition datetime.c:399
gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img)
Definition datetime.c:234
gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt)
Definition datetime.c:260
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:157
void dt_datetime_now_to_exif(char *exif)
Definition datetime.c:204
void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char *subsec)
Definition datetime.c:374
GTimeSpan dt_datetime_now_to_gtimespan(void)
Definition datetime.c:216
void dt_datetime_init(void)
Definition datetime.c:30
GDateTime * dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz)
Definition datetime.c:239
GTimeSpan dt_datetime_numbers_to_gtimespan(const dt_datetime_t *dt)
Definition datetime.c:429
gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix)
Definition datetime.c:178
GDateTime * dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:446
GDateTime * dt_string_to_datetime(const char *string)
Definition datetime.c:300
gboolean dt_datetime_img_to_local(char *local, const size_t local_size, const dt_image_t *img, const gboolean msec)
Definition datetime.c:172
gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add, gchar **result)
Definition datetime.c:474
GDateTime * dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts)
Definition datetime.c:424
gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts)
Definition datetime.c:384
GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt)
Definition datetime.c:438
gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts)
Definition datetime.c:412
gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif)
Definition datetime.c:68
GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:464
gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size, GDateTime *gdt, const gboolean msec, const gboolean tz)
Definition datetime.c:125
gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif)
Definition datetime.c:97
void dt_datetime_exif_to_img(dt_image_t *img, const char *exif)
Definition datetime.c:222
gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:327
gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix)
Definition datetime.c:191
gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:312
GDateTime * dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz)
Definition datetime.c:281
Definition datetime.h:46
gint msec
Definition datetime.h:53
gint day
Definition datetime.h:49
gint minute
Definition datetime.h:51
gint month
Definition datetime.h:48
gint hour
Definition datetime.h:50
gint second
Definition datetime.h:52
gint year
Definition datetime.h:47
Definition common/image.h:247