• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • graphics API Reference
  • KDE Home
  • Contact Us
 

digikam

  • extragear
  • graphics
  • digikam
  • core
  • libs
  • dngwriter
  • extra
  • dng_sdk
dng_date_time.h
Go to the documentation of this file.
1 /*****************************************************************************/
2 // Copyright 2006-2008 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE: Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8 
9 /* $Id: //mondo/dng_sdk_1_3/dng_sdk/source/dng_date_time.h#1 $ */
10 /* $DateTime: 2009/06/22 05:04:49 $ */
11 /* $Change: 578634 $ */
12 /* $Author: tknoll $ */
13 
18 /*****************************************************************************/
19 
20 #ifndef __dng_date_time__
21 #define __dng_date_time__
22 
23 /*****************************************************************************/
24 
25 #include "dng_classes.h"
26 #include "dng_string.h"
27 #include "dng_types.h"
28 
29 /*****************************************************************************/
30 
33 
34 class dng_date_time
35  {
36 
37  public:
38 
39  uint32 fYear;
40  uint32 fMonth;
41  uint32 fDay;
42  uint32 fHour;
43  uint32 fMinute;
44  uint32 fSecond;
45 
46  public:
47 
49 
50  dng_date_time ();
51 
59 
60  dng_date_time (uint32 year,
61  uint32 month,
62  uint32 day,
63  uint32 hour,
64  uint32 minute,
65  uint32 second);
66 
69 
70  bool IsValid () const;
71 
74 
75  bool NotValid () const
76  {
77  return !IsValid ();
78  }
79 
81 
82  bool operator== (const dng_date_time &dt) const
83  {
84  return fYear == dt.fYear &&
85  fMonth == dt.fMonth &&
86  fDay == dt.fDay &&
87  fHour == dt.fHour &&
88  fMinute == dt.fMinute &&
89  fSecond == dt.fSecond;
90  }
91 
92  // Not-equal operator.
93 
94  bool operator!= (const dng_date_time &dt) const
95  {
96  return !(*this == dt);
97  }
98 
100 
101  void Clear ();
102 
106 
107  bool Parse (const char *s);
108 
109  };
110 
111 /*****************************************************************************/
112 
114 
115 class dng_time_zone
116  {
117 
118  private:
119 
120  enum
121  {
122 
123  kMaxOffsetHours = 15,
124  kMinOffsetHours = -kMaxOffsetHours,
125 
126  kMaxOffsetMinutes = kMaxOffsetHours * 60,
127  kMinOffsetMinutes = kMinOffsetHours * 60,
128 
129  kInvalidOffset = kMinOffsetMinutes - 1
130 
131  };
132 
133  // Offset from GMT in minutes. Positive numbers are
134  // ahead of GMT, negative number are behind GMT.
135 
136  int32 fOffsetMinutes;
137 
138  public:
139 
140  dng_time_zone ()
141  : fOffsetMinutes (kInvalidOffset)
142  {
143  }
144 
145  void Clear ()
146  {
147  fOffsetMinutes = kInvalidOffset;
148  }
149 
150  void SetOffsetHours (int32 offset)
151  {
152  fOffsetMinutes = offset * 60;
153  }
154 
155  void SetOffsetMinutes (int32 offset)
156  {
157  fOffsetMinutes = offset;
158  }
159 
160  void SetOffsetSeconds (int32 offset)
161  {
162  fOffsetMinutes = (offset > 0) ? ((offset + 30) / 60)
163  : ((offset - 30) / 60);
164  }
165 
166  bool IsValid () const
167  {
168  return fOffsetMinutes >= kMinOffsetMinutes &&
169  fOffsetMinutes <= kMaxOffsetMinutes;
170  }
171 
172  bool NotValid () const
173  {
174  return !IsValid ();
175  }
176 
177  int32 OffsetMinutes () const
178  {
179  return fOffsetMinutes;
180  }
181 
182  bool IsExactHourOffset () const
183  {
184  return IsValid () && ((fOffsetMinutes % 60) == 0);
185  }
186 
187  int32 ExactHourOffset () const
188  {
189  return fOffsetMinutes / 60;
190  }
191 
192  dng_string Encode_ISO_8601 () const;
193 
194  };
195 
196 /*****************************************************************************/
197 
199 
200 class dng_date_time_info
201  {
202 
203  private:
204 
205  // Is only the date valid and not the time?
206 
207  bool fDateOnly;
208 
209  // Date and time.
210 
211  dng_date_time fDateTime;
212 
213  // Subseconds string (stored in a separate tag in EXIF).
214 
215  dng_string fSubseconds;
216 
217  // Time zone, if known.
218 
219  dng_time_zone fTimeZone;
220 
221  public:
222 
223  dng_date_time_info ();
224 
225  bool IsValid () const;
226 
227  bool NotValid () const
228  {
229  return !IsValid ();
230  }
231 
232  void Clear ()
233  {
234  *this = dng_date_time_info ();
235  }
236 
237  const dng_date_time & DateTime () const
238  {
239  return fDateTime;
240  }
241 
242  void SetDateTime (const dng_date_time &dt)
243  {
244  fDateOnly = false;
245  fDateTime = dt;
246  }
247 
248  const dng_string & Subseconds () const
249  {
250  return fSubseconds;
251  }
252 
253  void SetSubseconds (const dng_string &s)
254  {
255  fSubseconds = s;
256  }
257 
258  const dng_time_zone & TimeZone () const
259  {
260  return fTimeZone;
261  }
262 
263  void SetZone (const dng_time_zone &zone)
264  {
265  fTimeZone = zone;
266  }
267 
268  void Decode_ISO_8601 (const char *s);
269 
270  dng_string Encode_ISO_8601 () const;
271 
272  void Decode_IPTC_Date (const char *s);
273 
274  dng_string Encode_IPTC_Date () const;
275 
276  void Decode_IPTC_Time (const char *s);
277 
278  dng_string Encode_IPTC_Time () const;
279 
280  private:
281 
282  void SetDate (uint32 year,
283  uint32 month,
284  uint32 day);
285 
286  void SetTime (uint32 hour,
287  uint32 minute,
288  uint32 second);
289 
290  };
291 
292 /*****************************************************************************/
293 
296 
297 void CurrentDateTimeAndZone (dng_date_time_info &info);
298 
299 /*****************************************************************************/
300 
302 
303 void DecodeUnixTime (uint32 unixTime, dng_date_time &dt);
304 
305 /*****************************************************************************/
306 
311 
312 dng_time_zone LocalTimeZone (const dng_date_time &dt);
313 
314 /*****************************************************************************/
315 
317 
318 enum dng_date_time_format
319  {
320  dng_date_time_format_unknown = 0,
321  dng_date_time_format_exif = 1,
322  dng_date_time_format_unix_little_endian = 2,
323  dng_date_time_format_unix_big_endian = 3
324  };
325 
326 /*****************************************************************************/
327 
332 
333 class dng_date_time_storage_info
334  {
335 
336  private:
337 
338  uint64 fOffset;
339 
340  dng_date_time_format fFormat;
341 
342  public:
343 
345 
346  dng_date_time_storage_info ();
347 
349 
350  dng_date_time_storage_info (uint64 offset,
351  dng_date_time_format format);
352 
355 
356  bool IsValid () const;
357 
358  // The accessors throw if the data is not valid.
359 
363 
364  uint64 Offset () const;
365 
370 
371  dng_date_time_format Format () const;
372 
373  };
374 
375 /*****************************************************************************/
376 
377 #endif
378 
379 /*****************************************************************************/
dng_string
Definition: dng_string.h:26
dng_date_time::fMinute
uint32 fMinute
Definition: dng_date_time.h:43
dng_date_time_info::TimeZone
const dng_time_zone & TimeZone() const
Definition: dng_date_time.h:258
dng_time_zone::SetOffsetSeconds
void SetOffsetSeconds(int32 offset)
Definition: dng_date_time.h:160
dng_date_time_storage_info::IsValid
bool IsValid() const
Predicate to determine if an offset is valid.
Definition: dng_date_time.cpp:883
dng_time_zone::SetOffsetHours
void SetOffsetHours(int32 offset)
Definition: dng_date_time.h:150
dng_date_time_info::SetSubseconds
void SetSubseconds(const dng_string &s)
Definition: dng_date_time.h:253
dng_date_time::fHour
uint32 fHour
Definition: dng_date_time.h:42
uint64
unsigned long long uint64
Definition: dng_types.h:65
dng_date_time_info::NotValid
bool NotValid() const
Definition: dng_date_time.h:227
dng_date_time_format_unix_big_endian
32-bit UNIX time as 4-byte little endian
Definition: dng_date_time.h:323
dng_types.h
int32
signed long int32
Definition: dng_types.h:54
dng_date_time::fMonth
uint32 fMonth
Definition: dng_date_time.h:40
dng_date_time_info::Encode_ISO_8601
dng_string Encode_ISO_8601() const
Definition: dng_date_time.cpp:408
dng_time_zone::Clear
void Clear()
Definition: dng_date_time.h:145
dng_date_time_info::Decode_IPTC_Time
void Decode_IPTC_Time(const char *s)
Definition: dng_date_time.cpp:542
dng_date_time_info::Decode_ISO_8601
void Decode_ISO_8601(const char *s)
Definition: dng_date_time.cpp:274
dng_string.h
dng_date_time_format_unix_little_endian
EXIF date string.
Definition: dng_date_time.h:322
dng_time_zone
Class for holding a time zone.
Definition: dng_date_time.h:115
dng_date_time::IsValid
bool IsValid() const
Predicate to determine if a date is valid.
Definition: dng_date_time.cpp:116
dng_time_zone::ExactHourOffset
int32 ExactHourOffset() const
Definition: dng_date_time.h:187
dng_date_time::fSecond
uint32 fSecond
Definition: dng_date_time.h:44
dng_time_zone::IsExactHourOffset
bool IsExactHourOffset() const
Definition: dng_date_time.h:182
dng_date_time::operator!=
bool operator!=(const dng_date_time &dt) const
Definition: dng_date_time.h:94
dng_time_zone::IsValid
bool IsValid() const
Definition: dng_date_time.h:166
dng_date_time_info
Class for holding complete data/time/zone information.
Definition: dng_date_time.h:200
dng_date_time_info::Encode_IPTC_Date
dng_string Encode_IPTC_Date() const
Definition: dng_date_time.cpp:516
dng_date_time_format
dng_date_time_format
Tag to encode date representation format.
Definition: dng_date_time.h:318
dng_date_time_info::IsValid
bool IsValid() const
Definition: dng_date_time.cpp:237
dng_time_zone::OffsetMinutes
int32 OffsetMinutes() const
Definition: dng_date_time.h:177
dng_date_time_info::SetDateTime
void SetDateTime(const dng_date_time &dt)
Definition: dng_date_time.h:242
dng_date_time_info::Decode_IPTC_Date
void Decode_IPTC_Date(const char *s)
Definition: dng_date_time.cpp:487
dng_date_time::dng_date_time
dng_date_time()
Construct an invalid date/time.
Definition: dng_date_time.cpp:81
dng_date_time_storage_info::Format
dng_date_time_format Format() const
Get for format date was originally stored in file.
Definition: dng_date_time.cpp:904
dng_date_time_storage_info
Store file offset from which date was read.
Definition: dng_date_time.h:333
dng_date_time_format_exif
Date format not known.
Definition: dng_date_time.h:321
dng_date_time_info::dng_date_time_info
dng_date_time_info()
Definition: dng_date_time.cpp:224
dng_date_time_storage_info::dng_date_time_storage_info
dng_date_time_storage_info()
The default constructor initializes to an invalid state.
Definition: dng_date_time.cpp:860
dng_time_zone::Encode_ISO_8601
dng_string Encode_ISO_8601() const
Definition: dng_date_time.cpp:174
dng_date_time::Parse
bool Parse(const char *s)
Parse an EXIF format date string.
Definition: dng_date_time.cpp:158
LocalTimeZone
dng_time_zone LocalTimeZone(const dng_date_time &dt)
Return timezone of current location at a given date.
Definition: dng_date_time.cpp:747
dng_date_time::Clear
void Clear()
Set date to an invalid value.
Definition: dng_date_time.cpp:130
dng_date_time_info::Subseconds
const dng_string & Subseconds() const
Definition: dng_date_time.h:248
dng_date_time_storage_info::Offset
uint64 Offset() const
Getter for offset in file.
Definition: dng_date_time.cpp:892
dng_date_time::fYear
uint32 fYear
Definition: dng_date_time.h:39
dng_date_time_info::DateTime
const dng_date_time & DateTime() const
Definition: dng_date_time.h:237
dng_classes.h
dng_date_time_info::Clear
void Clear()
Definition: dng_date_time.h:232
dng_date_time
Class for holding a date/time and converting to and from relevant date/time formats.
Definition: dng_date_time.h:34
Digikam::cimg_library::cimg::info
void info()
Print information about CImg environment variables.
Definition: CImg.h:5763
dng_date_time::fDay
uint32 fDay
Definition: dng_date_time.h:41
dng_date_time::operator==
bool operator==(const dng_date_time &dt) const
Equal operator.
Definition: dng_date_time.h:82
dng_date_time_format_unknown
Definition: dng_date_time.h:320
uint32
unsigned long uint32
Definition: dng_types.h:63
dng_date_time::NotValid
bool NotValid() const
Predicate to determine if a date is invalid.
Definition: dng_date_time.h:75
dng_date_time_info::SetZone
void SetZone(const dng_time_zone &zone)
Definition: dng_date_time.h:263
dng_time_zone::SetOffsetMinutes
void SetOffsetMinutes(int32 offset)
Definition: dng_date_time.h:155
CurrentDateTimeAndZone
void CurrentDateTimeAndZone(dng_date_time_info &info)
Get the current date/time and timezone.
Definition: dng_date_time.cpp:635
DecodeUnixTime
void DecodeUnixTime(uint32 unixTime, dng_date_time &dt)
Convert UNIX "seconds since Jan 1, 1970" time to a dng_date_time.
Definition: dng_date_time.cpp:701
dng_time_zone::NotValid
bool NotValid() const
Definition: dng_date_time.h:172
dng_time_zone::dng_time_zone
dng_time_zone()
Definition: dng_date_time.h:140
dng_date_time_info::Encode_IPTC_Time
dng_string Encode_IPTC_Time() const
Definition: dng_date_time.cpp:602
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Sat Dec 14 2019 02:33:35 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

digikam

Skip menu "digikam"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages
-->

graphics API Reference

Skip menu "graphics API Reference"
  • digikam
  • KDiagram
  •     KChart
  •     KGantt
  • KPhotoAlbum
  •   AndroidRemoteControl
  • Krita
  •   libs
  •     KritaBasicFlakes
  •     brush
  •     KritaUndo2
  •     KritaFlake
  •     image
  •     KritaPlugin
  •     Krita
  •     KritaOdf
  •     KritaPigment
  •     KritaStore
  •     ui
  •     KritaWidgets
  •     KritaWidgetUtils
  •   plugins
  •     Assitants
  •     Extensions
  •     Filters
  •         KritaText
  •         KritaTextLayout
  •     Generators
  •     Formats
  •             src
  •     PaintOps
  •       libpaintop
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal