| 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 |