]> git.saurik.com Git - wxWidgets.git/blame - src/msw/wince/time.cpp
made wxTLW::GetSize() return the size of the maximized frame when called between...
[wxWidgets.git] / src / msw / wince / time.cpp
CommitLineData
1c193821
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/msw/wince/time.cpp
3// Purpose: Implements missing time functionality for WinCE
f22cc0b4
JS
4// Author: Marco Cavallini (MCK) - wx@koansoftware.com
5// Modified by:
6// Created: 31-08-2003
7// RCS-ID:
991420e6 8// Copyright: (c) Marco Cavallini
65571936 9// Licence: wxWindows licence
1c193821
JS
10/////////////////////////////////////////////////////////////////////////////
11
12// ===========================================================================
13// declarations
14// ===========================================================================
15
16// ---------------------------------------------------------------------------
17// headers
18// ---------------------------------------------------------------------------
19
14f355c2 20#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
1c193821
JS
21 #pragma implementation "window.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#ifndef WX_PRECOMP
9ed0d735 32 #include "wx/msw/wrapwin.h"
1c193821
JS
33#endif
34
35#include "wx/msw/wince/time.h"
f22cc0b4 36#include <winbase.h>
1c193821 37
f22cc0b4 38#define is_leap(y) (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
991420e6
WS
39#define SECONDS_IN_ONE_MINUTE 60
40#define DAYS_IN_ONE_YEAR 365
41#define SECONDS_IN_ONE_MIN 60
42#define SECONDS_IN_ONE_HOUR 3600
43#define SECONDS_IN_ONE_DAY 86400
44#define DEFAULT_TIMEZONE 28800
45#define DO_GMTIME 0
46#define DO_LOCALTIME 1
1c193821 47
1c193821 48
991420e6 49long timezone ; // global variable
f22cc0b4
JS
50
51
52////////////////////////////////////////////////////////////////////////
53// Common code for localtime and gmtime (static)
54////////////////////////////////////////////////////////////////////////
991420e6 55static struct tm * __cdecl common_localtime(const time_t * WXUNUSED(t), BOOL bLocal)
1c193821 56{
991420e6
WS
57 wxString str ;
58 SYSTEMTIME SystemTime;
59 TIME_ZONE_INFORMATION pTz;
60 static struct tm st_res ; // data holder
61 static struct tm * res = &st_res ; // data pointer
62 int iLeap;
63 const unsigned short int __mon_yday[2][13] =
64 {
65 // Normal years
66 { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
67 // Leap years
68 { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
69 };
70
71 ::GetLocalTime(&SystemTime) ;
72 ::GetTimeZoneInformation(&pTz);
73
74 ///////////////////////////////////////////////
75 // Set timezone
76 timezone = pTz.Bias * SECONDS_IN_ONE_MINUTE ;
77 ///////////////////////////////////////////////
78
79 iLeap = is_leap(SystemTime.wYear) ;
80
81 res->tm_hour = SystemTime.wHour;
82 res->tm_min = SystemTime.wMinute;
83 res->tm_sec = SystemTime.wSecond;
84
85 res->tm_mday = SystemTime.wDay;
86 res->tm_mon = SystemTime.wMonth - 1; // this the correct month but localtime returns month aligned to zero
87 res->tm_year = SystemTime.wYear; // this the correct year
88 res->tm_year = res->tm_year - 1900; // but localtime returns the value starting at the 1900
89
90 res->tm_wday = SystemTime.wDayOfWeek;
91 res->tm_yday = __mon_yday[iLeap][res->tm_mon] + SystemTime.wDay - 1; // localtime returns year-day aligned to zero
92
93 // if localtime behavior and daylight saving
94 if (bLocal && pTz.DaylightBias != 0)
95 res->tm_isdst = 1;
96 else
97 res->tm_isdst = 0; // without daylight saving or gmtime
f22cc0b4
JS
98
99 return res;
1c193821
JS
100}
101
92bdf9f7
VZ
102extern "C"
103{
104
f22cc0b4
JS
105////////////////////////////////////////////////////////////////////////
106// Receive the number of seconds elapsed since midnight(00:00:00)
107// and convert a time value and corrects for the local time zone
108////////////////////////////////////////////////////////////////////////
109struct tm * __cdecl localtime(const time_t * t)
1c193821 110{
991420e6 111 return common_localtime(t, DO_LOCALTIME) ;
1c193821
JS
112}
113
f22cc0b4
JS
114////////////////////////////////////////////////////////////////////////
115// Receives the number of seconds elapsed since midnight(00:00:00)
116// and converts a time value WITHOUT correcting for the local time zone
117////////////////////////////////////////////////////////////////////////
118struct tm * __cdecl gmtime(const time_t *t)
1c193821 119{
991420e6 120 return common_localtime(t, DO_GMTIME) ;
1c193821
JS
121}
122
92bdf9f7 123}
f22cc0b4
JS
124
125////////////////////////////////////////////////////////////////////////
126// Common code for conversion of struct tm into time_t (static)
127////////////////////////////////////////////////////////////////////////
128static time_t __cdecl common_tm_to_time(int day, int month, int year, int hour, int minute, int second)
1c193821 129{
991420e6
WS
130 time_t prog = 0 ;
131 static int mdays[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 } ;
132
133 while (--month)
134 {
135 prog += mdays[month - 1] ;
136 if (month == 2 && is_leap(year))
137 prog++ ;
138 }
139
140 // Calculate seconds in elapsed days
141 prog = day - 1 ; // align first day of the year to zero
142 prog += (DAYS_IN_ONE_YEAR * (year - 1970) + (year - 1901) / 4 - 19) ;
143 prog *= SECONDS_IN_ONE_DAY ;
144
145 // Add Calculated elapsed seconds in the current day
146 prog += (hour * SECONDS_IN_ONE_HOUR + minute *
147 SECONDS_IN_ONE_MIN + second) ;
148
149 return prog ;
1c193821
JS
150}
151
92bdf9f7
VZ
152extern "C"
153{
f22cc0b4
JS
154
155////////////////////////////////////////////////////////////////////////
156// Returns the number of seconds elapsed since
157// midnight(00:00:00) of 1 January 1970
158////////////////////////////////////////////////////////////////////////
159time_t __cdecl time(time_t *t)
1c193821 160{
991420e6 161 time_t prog = 0 ;
f22cc0b4 162
991420e6
WS
163 if (t != NULL)
164 {
165 SYSTEMTIME SystemTime;
f22cc0b4 166
991420e6
WS
167 ::GetLocalTime(&SystemTime) ;
168 prog = common_tm_to_time(SystemTime.wDay, SystemTime.wMonth, SystemTime.wYear,
169 SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond) ;
170 *t = prog ;
171 }
f22cc0b4 172
991420e6 173 return prog ;
1c193821
JS
174}
175
f22cc0b4
JS
176////////////////////////////////////////////////////////////////////////
177// Converts the local time provided by struct tm
178// into a time_t calendar value
179////////////////////////////////////////////////////////////////////////
180time_t __cdecl mktime(struct tm *t)
181{
991420e6 182 return (common_tm_to_time(t->tm_mday, t->tm_mon+1, t->tm_year+1900, t->tm_hour, t->tm_min, t->tm_sec)) ;
f22cc0b4
JS
183}
184
185
186size_t __cdecl wcsftime(wchar_t *, size_t, const wchar_t *, const struct tm *)
187{
188 // TODO : maybe copy something from wxString::Printf
189
190 return 0;
191}
92bdf9f7
VZ
192
193} // extern "C"