OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/include/fxcrt/fx_system.h" | 7 #include "core/include/fxcrt/fx_system.h" |
8 #include "xfa/fgas/localization/fgas_datetime.h" | 8 #include "xfa/fgas/localization/fgas_datetime.h" |
9 | 9 |
10 #if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_ || \ | 10 #if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_ || \ |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 if (iDays < iMonthDays) { | 117 if (iDays < iMonthDays) { |
118 break; | 118 break; |
119 } | 119 } |
120 iMonth++; | 120 iMonth++; |
121 iDays -= iMonthDays; | 121 iDays -= iMonthDays; |
122 } | 122 } |
123 iDay += (uint8_t)iDays; | 123 iDay += (uint8_t)iDays; |
124 } | 124 } |
125 | 125 |
126 struct FXUT_SYSTEMTIME { | 126 struct FXUT_SYSTEMTIME { |
127 FX_WORD wYear; | 127 uint16_t wYear; |
128 FX_WORD wMonth; | 128 uint16_t wMonth; |
129 FX_WORD wDayOfWeek; | 129 uint16_t wDayOfWeek; |
130 FX_WORD wDay; | 130 uint16_t wDay; |
131 FX_WORD wHour; | 131 uint16_t wHour; |
132 FX_WORD wMinute; | 132 uint16_t wMinute; |
133 FX_WORD wSecond; | 133 uint16_t wSecond; |
134 FX_WORD wMilliseconds; | 134 uint16_t wMilliseconds; |
135 }; | 135 }; |
136 | 136 |
137 void CFX_Unitime::Now() { | 137 void CFX_Unitime::Now() { |
138 FXUT_SYSTEMTIME utLocal; | 138 FXUT_SYSTEMTIME utLocal; |
139 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ | 139 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ |
140 _FX_OS_ == _FX_WIN64_ | 140 _FX_OS_ == _FX_WIN64_ |
141 ::GetLocalTime((LPSYSTEMTIME)&utLocal); | 141 ::GetLocalTime((LPSYSTEMTIME)&utLocal); |
142 #elif _FX_OS_ != _FX_EMBEDDED_ | 142 #elif _FX_OS_ != _FX_EMBEDDED_ |
143 #if 1 | 143 #if 1 |
144 timeval curTime; | 144 timeval curTime; |
145 gettimeofday(&curTime, NULL); | 145 gettimeofday(&curTime, NULL); |
146 #else | 146 #else |
147 struct timespec curTime; | 147 struct timespec curTime; |
148 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); | 148 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); |
149 #endif | 149 #endif |
150 struct tm st; | 150 struct tm st; |
151 localtime_r(&curTime.tv_sec, &st); | 151 localtime_r(&curTime.tv_sec, &st); |
152 utLocal.wYear = st.tm_year + 1900; | 152 utLocal.wYear = st.tm_year + 1900; |
153 utLocal.wMonth = st.tm_mon + 1; | 153 utLocal.wMonth = st.tm_mon + 1; |
154 utLocal.wDayOfWeek = st.tm_wday; | 154 utLocal.wDayOfWeek = st.tm_wday; |
155 utLocal.wDay = st.tm_mday; | 155 utLocal.wDay = st.tm_mday; |
156 utLocal.wHour = st.tm_hour; | 156 utLocal.wHour = st.tm_hour; |
157 utLocal.wMinute = st.tm_min; | 157 utLocal.wMinute = st.tm_min; |
158 utLocal.wSecond = st.tm_sec; | 158 utLocal.wSecond = st.tm_sec; |
159 utLocal.wMilliseconds = curTime.tv_usec / 1000; | 159 utLocal.wMilliseconds = curTime.tv_usec / 1000; |
160 #endif | 160 #endif |
161 Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, | 161 Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, |
162 (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, | 162 (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, |
163 (uint8_t)utLocal.wSecond, (FX_WORD)utLocal.wMilliseconds); | 163 (uint8_t)utLocal.wSecond, (uint16_t)utLocal.wMilliseconds); |
164 } | 164 } |
165 void CFX_Unitime::SetGMTime() { | 165 void CFX_Unitime::SetGMTime() { |
166 FXUT_SYSTEMTIME utLocal; | 166 FXUT_SYSTEMTIME utLocal; |
167 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ | 167 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ |
168 _FX_OS_ == _FX_WIN64_ | 168 _FX_OS_ == _FX_WIN64_ |
169 ::GetSystemTime((LPSYSTEMTIME)&utLocal); | 169 ::GetSystemTime((LPSYSTEMTIME)&utLocal); |
170 #elif _FX_OS_ != _FX_EMBEDDED_ | 170 #elif _FX_OS_ != _FX_EMBEDDED_ |
171 #if 1 | 171 #if 1 |
172 timeval curTime; | 172 timeval curTime; |
173 gettimeofday(&curTime, NULL); | 173 gettimeofday(&curTime, NULL); |
174 #else | 174 #else |
175 struct timespec curTime; | 175 struct timespec curTime; |
176 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); | 176 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); |
177 #endif | 177 #endif |
178 struct tm st; | 178 struct tm st; |
179 gmtime_r(&curTime.tv_sec, &st); | 179 gmtime_r(&curTime.tv_sec, &st); |
180 utLocal.wYear = st.tm_year + 1900; | 180 utLocal.wYear = st.tm_year + 1900; |
181 utLocal.wMonth = st.tm_mon + 1; | 181 utLocal.wMonth = st.tm_mon + 1; |
182 utLocal.wDayOfWeek = st.tm_wday; | 182 utLocal.wDayOfWeek = st.tm_wday; |
183 utLocal.wDay = st.tm_mday; | 183 utLocal.wDay = st.tm_mday; |
184 utLocal.wHour = st.tm_hour; | 184 utLocal.wHour = st.tm_hour; |
185 utLocal.wMinute = st.tm_min; | 185 utLocal.wMinute = st.tm_min; |
186 utLocal.wSecond = st.tm_sec; | 186 utLocal.wSecond = st.tm_sec; |
187 utLocal.wMilliseconds = curTime.tv_usec / 1000; | 187 utLocal.wMilliseconds = curTime.tv_usec / 1000; |
188 #endif | 188 #endif |
189 Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, | 189 Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, |
190 (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, | 190 (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, |
191 (uint8_t)utLocal.wSecond, (FX_WORD)utLocal.wMilliseconds); | 191 (uint8_t)utLocal.wSecond, (uint16_t)utLocal.wMilliseconds); |
192 } | 192 } |
193 void CFX_Unitime::Set(int32_t year, | 193 void CFX_Unitime::Set(int32_t year, |
194 uint8_t month, | 194 uint8_t month, |
195 uint8_t day, | 195 uint8_t day, |
196 uint8_t hour, | 196 uint8_t hour, |
197 uint8_t minute, | 197 uint8_t minute, |
198 uint8_t second, | 198 uint8_t second, |
199 FX_WORD millisecond) { | 199 uint16_t millisecond) { |
200 FXSYS_assert(hour <= 23); | 200 FXSYS_assert(hour <= 23); |
201 FXSYS_assert(minute <= 59); | 201 FXSYS_assert(minute <= 59); |
202 FXSYS_assert(second <= 59); | 202 FXSYS_assert(second <= 59); |
203 FXSYS_assert(millisecond <= 999); | 203 FXSYS_assert(millisecond <= 999); |
204 m_iUnitime = (int64_t)hour * g_FXMillisecondsPerHour + | 204 m_iUnitime = (int64_t)hour * g_FXMillisecondsPerHour + |
205 (int64_t)minute * g_FXMillisecondsPerMinute + | 205 (int64_t)minute * g_FXMillisecondsPerMinute + |
206 (int64_t)second * g_FXMillisecondsPerSecond + millisecond; | 206 (int64_t)second * g_FXMillisecondsPerSecond + millisecond; |
207 if (year > 0) { | 207 if (year > 0) { |
208 m_iUnitime = | 208 m_iUnitime = |
209 m_iUnitime + | 209 m_iUnitime + |
(...skipping 21 matching lines...) Expand all Loading... |
231 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); | 231 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); |
232 return iDay; | 232 return iDay; |
233 } | 233 } |
234 FX_WEEKDAY CFX_Unitime::GetDayOfWeek() const { | 234 FX_WEEKDAY CFX_Unitime::GetDayOfWeek() const { |
235 int32_t v = (int32_t)((m_iUnitime / g_FXMillisecondsPerDay + 1) % 7); | 235 int32_t v = (int32_t)((m_iUnitime / g_FXMillisecondsPerDay + 1) % 7); |
236 if (v < 0) { | 236 if (v < 0) { |
237 v += 7; | 237 v += 7; |
238 } | 238 } |
239 return (FX_WEEKDAY)v; | 239 return (FX_WEEKDAY)v; |
240 } | 240 } |
241 FX_WORD CFX_Unitime::GetDayOfYear() const { | 241 uint16_t CFX_Unitime::GetDayOfYear() const { |
242 int32_t iYear; | 242 int32_t iYear; |
243 uint8_t iMonth, iDay; | 243 uint8_t iMonth, iDay; |
244 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); | 244 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); |
245 return FX_DaysBeforeMonthInYear(iYear, iMonth) + iDay; | 245 return FX_DaysBeforeMonthInYear(iYear, iMonth) + iDay; |
246 } | 246 } |
247 int64_t CFX_Unitime::GetDayOfAD() const { | 247 int64_t CFX_Unitime::GetDayOfAD() const { |
248 FX_BOOL bBC = m_iUnitime < 0; | 248 FX_BOOL bBC = m_iUnitime < 0; |
249 int64_t iDays = m_iUnitime / g_FXMillisecondsPerDay; | 249 int64_t iDays = m_iUnitime / g_FXMillisecondsPerDay; |
250 iDays += bBC ? -1 : 0; | 250 iDays += bBC ? -1 : 0; |
251 if (bBC && (m_iUnitime % g_FXMillisecondsPerDay) == 0) { | 251 if (bBC && (m_iUnitime % g_FXMillisecondsPerDay) == 0) { |
(...skipping 15 matching lines...) Expand all Loading... |
267 } | 267 } |
268 return (uint8_t)(v / g_FXMillisecondsPerMinute); | 268 return (uint8_t)(v / g_FXMillisecondsPerMinute); |
269 } | 269 } |
270 uint8_t CFX_Unitime::GetSecond() const { | 270 uint8_t CFX_Unitime::GetSecond() const { |
271 int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerMinute); | 271 int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerMinute); |
272 if (v < 0) { | 272 if (v < 0) { |
273 v += g_FXMillisecondsPerMinute; | 273 v += g_FXMillisecondsPerMinute; |
274 } | 274 } |
275 return (uint8_t)(v / g_FXMillisecondsPerSecond); | 275 return (uint8_t)(v / g_FXMillisecondsPerSecond); |
276 } | 276 } |
277 FX_WORD CFX_Unitime::GetMillisecond() const { | 277 uint16_t CFX_Unitime::GetMillisecond() const { |
278 int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerSecond); | 278 int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerSecond); |
279 if (v < 0) { | 279 if (v < 0) { |
280 v += g_FXMillisecondsPerSecond; | 280 v += g_FXMillisecondsPerSecond; |
281 } | 281 } |
282 return (FX_WORD)v; | 282 return (uint16_t)v; |
283 } | 283 } |
284 FX_BOOL CFX_Unitime::AddYears(int32_t iYears) { | 284 FX_BOOL CFX_Unitime::AddYears(int32_t iYears) { |
285 FX_UNITIME ut = m_iUnitime; | 285 FX_UNITIME ut = m_iUnitime; |
286 if (ut < 0) { | 286 if (ut < 0) { |
287 ut = -ut; | 287 ut = -ut; |
288 } | 288 } |
289 FX_UNITIME r = ut % g_FXMillisecondsPerDay; | 289 FX_UNITIME r = ut % g_FXMillisecondsPerDay; |
290 int32_t iYear; | 290 int32_t iYear; |
291 uint8_t iMonth, iDay; | 291 uint8_t iMonth, iDay; |
292 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); | 292 FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 FX_BOOL CFX_Unitime::AddMilliseconds(int32_t iMilliseconds) { | 343 FX_BOOL CFX_Unitime::AddMilliseconds(int32_t iMilliseconds) { |
344 m_iUnitime += iMilliseconds; | 344 m_iUnitime += iMilliseconds; |
345 return TRUE; | 345 return TRUE; |
346 } | 346 } |
347 FX_BOOL CFX_DateTime::Set(int32_t year, | 347 FX_BOOL CFX_DateTime::Set(int32_t year, |
348 uint8_t month, | 348 uint8_t month, |
349 uint8_t day, | 349 uint8_t day, |
350 uint8_t hour, | 350 uint8_t hour, |
351 uint8_t minute, | 351 uint8_t minute, |
352 uint8_t second, | 352 uint8_t second, |
353 FX_WORD millisecond) { | 353 uint16_t millisecond) { |
354 ASSERT(year != 0); | 354 ASSERT(year != 0); |
355 ASSERT(month >= 1 && month <= 12); | 355 ASSERT(month >= 1 && month <= 12); |
356 ASSERT(day >= 1 && day <= FX_DaysInMonth(year, month)); | 356 ASSERT(day >= 1 && day <= FX_DaysInMonth(year, month)); |
357 ASSERT(hour <= 23); | 357 ASSERT(hour <= 23); |
358 ASSERT(minute <= 59); | 358 ASSERT(minute <= 59); |
359 ASSERT(second <= 59); | 359 ASSERT(second <= 59); |
360 ASSERT(millisecond <= 999); | 360 ASSERT(millisecond <= 999); |
361 m_DateTime.Date.sDate.year = year; | 361 m_DateTime.Date.sDate.year = year; |
362 m_DateTime.Date.sDate.month = month; | 362 m_DateTime.Date.sDate.month = month; |
363 m_DateTime.Date.sDate.day = day; | 363 m_DateTime.Date.sDate.day = day; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 FX_WEEKDAY CFX_DateTime::GetDayOfWeek() const { | 400 FX_WEEKDAY CFX_DateTime::GetDayOfWeek() const { |
401 int32_t v = (int32_t)(FX_DateToDays(m_DateTime.Date.sDate.year, | 401 int32_t v = (int32_t)(FX_DateToDays(m_DateTime.Date.sDate.year, |
402 m_DateTime.Date.sDate.month, | 402 m_DateTime.Date.sDate.month, |
403 m_DateTime.Date.sDate.day, TRUE) % | 403 m_DateTime.Date.sDate.day, TRUE) % |
404 7); | 404 7); |
405 if (v < 0) { | 405 if (v < 0) { |
406 v += 7; | 406 v += 7; |
407 } | 407 } |
408 return (FX_WEEKDAY)v; | 408 return (FX_WEEKDAY)v; |
409 } | 409 } |
410 FX_WORD CFX_DateTime::GetDayOfYear() const { | 410 uint16_t CFX_DateTime::GetDayOfYear() const { |
411 return FX_DaysBeforeMonthInYear(m_DateTime.Date.sDate.year, | 411 return FX_DaysBeforeMonthInYear(m_DateTime.Date.sDate.year, |
412 m_DateTime.Date.sDate.month) + | 412 m_DateTime.Date.sDate.month) + |
413 m_DateTime.Date.sDate.day; | 413 m_DateTime.Date.sDate.day; |
414 } | 414 } |
415 int64_t CFX_DateTime::GetDayOfAD() const { | 415 int64_t CFX_DateTime::GetDayOfAD() const { |
416 return FX_DateToDays(m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, | 416 return FX_DateToDays(m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, |
417 m_DateTime.Date.sDate.day, TRUE); | 417 m_DateTime.Date.sDate.day, TRUE); |
418 } | 418 } |
419 uint8_t CFX_DateTime::GetHour() const { | 419 uint8_t CFX_DateTime::GetHour() const { |
420 return m_DateTime.Date.sDate.day; | 420 return m_DateTime.Date.sDate.day; |
421 } | 421 } |
422 uint8_t CFX_DateTime::GetMinute() const { | 422 uint8_t CFX_DateTime::GetMinute() const { |
423 return m_DateTime.Time.sTime.minute; | 423 return m_DateTime.Time.sTime.minute; |
424 } | 424 } |
425 uint8_t CFX_DateTime::GetSecond() const { | 425 uint8_t CFX_DateTime::GetSecond() const { |
426 return m_DateTime.Time.sTime.second; | 426 return m_DateTime.Time.sTime.second; |
427 } | 427 } |
428 FX_WORD CFX_DateTime::GetMillisecond() const { | 428 uint16_t CFX_DateTime::GetMillisecond() const { |
429 return m_DateTime.Time.sTime.millisecond; | 429 return m_DateTime.Time.sTime.millisecond; |
430 } | 430 } |
431 FX_BOOL CFX_DateTime::AddYears(int32_t iYears) { | 431 FX_BOOL CFX_DateTime::AddYears(int32_t iYears) { |
432 if (iYears == 0) { | 432 if (iYears == 0) { |
433 return FALSE; | 433 return FALSE; |
434 } | 434 } |
435 int32_t v = m_DateTime.Date.sDate.year + iYears; | 435 int32_t v = m_DateTime.Date.sDate.year + iYears; |
436 if (v >= 0 && m_DateTime.Date.sDate.year < 0) { | 436 if (v >= 0 && m_DateTime.Date.sDate.year < 0) { |
437 v++; | 437 v++; |
438 } else if (v <= 0 && m_DateTime.Date.sDate.year > 0) { | 438 } else if (v <= 0 && m_DateTime.Date.sDate.year > 0) { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 FX_BOOL CFX_DateTime::AddMilliseconds(int32_t iMilliseconds) { | 535 FX_BOOL CFX_DateTime::AddMilliseconds(int32_t iMilliseconds) { |
536 if (iMilliseconds == 0) { | 536 if (iMilliseconds == 0) { |
537 return FALSE; | 537 return FALSE; |
538 } | 538 } |
539 iMilliseconds += m_DateTime.Time.sTime.millisecond; | 539 iMilliseconds += m_DateTime.Time.sTime.millisecond; |
540 int32_t iSeconds = (int32_t)(iMilliseconds / g_FXMillisecondsPerSecond); | 540 int32_t iSeconds = (int32_t)(iMilliseconds / g_FXMillisecondsPerSecond); |
541 iMilliseconds %= g_FXMillisecondsPerSecond; | 541 iMilliseconds %= g_FXMillisecondsPerSecond; |
542 if (iMilliseconds < 0) { | 542 if (iMilliseconds < 0) { |
543 iSeconds--, iMilliseconds += g_FXMillisecondsPerSecond; | 543 iSeconds--, iMilliseconds += g_FXMillisecondsPerSecond; |
544 } | 544 } |
545 m_DateTime.Time.sTime.millisecond = (FX_WORD)iMilliseconds; | 545 m_DateTime.Time.sTime.millisecond = (uint16_t)iMilliseconds; |
546 if (iSeconds != 0) { | 546 if (iSeconds != 0) { |
547 AddSeconds(iSeconds); | 547 AddSeconds(iSeconds); |
548 } | 548 } |
549 return TRUE; | 549 return TRUE; |
550 } | 550 } |
OLD | NEW |