3719 res.tm_year = sysTime.wYear - 1900; |
3720 res.tm_year = sysTime.wYear - 1900; |
3720 brokenDown = &res; |
3721 brokenDown = &res; |
3721 #elif defined(Q_OS_SYMBIAN) |
3722 #elif defined(Q_OS_SYMBIAN) |
3722 // months and days are zero index based |
3723 // months and days are zero index based |
3723 _LIT(KUnixEpoch, "19700000:000000.000000"); |
3724 _LIT(KUnixEpoch, "19700000:000000.000000"); |
3724 TTimeIntervalSeconds utcOffset = User::UTCOffset(); |
|
3725 TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); |
3725 TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); |
3726 TTime epochTTime; |
3726 TTime epochTTime; |
3727 TInt err = epochTTime.Set(KUnixEpoch); |
3727 TInt err = epochTTime.Set(KUnixEpoch); |
3728 tm res; |
3728 tm res; |
3729 if(err == KErrNone) { |
3729 if(err == KErrNone) { |
3730 TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; |
3730 TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; |
3731 utcTTime = utcTTime + utcOffset; |
3731 TRAP(err, |
3732 TDateTime utcDateTime = utcTTime.DateTime(); |
3732 RTz tz; |
3733 res.tm_sec = utcDateTime.Second(); |
3733 User::LeaveIfError(tz.Connect()); |
3734 res.tm_min = utcDateTime.Minute(); |
3734 CleanupClosePushL(tz); |
3735 res.tm_hour = utcDateTime.Hour(); |
3735 res.tm_isdst = tz.IsDaylightSavingOnL(*tz.GetTimeZoneIdL(),utcTTime); |
3736 res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct |
3736 User::LeaveIfError(tz.ConvertToLocalTime(utcTTime)); |
3737 res.tm_mon = utcDateTime.Month(); |
3737 CleanupStack::PopAndDestroy(&tz)); |
3738 res.tm_year = utcDateTime.Year() - 1900; |
3738 if (KErrNone == err) { |
3739 res.tm_isdst = 0; |
3739 TDateTime localDateTime = utcTTime.DateTime(); |
3740 brokenDown = &res; |
3740 res.tm_sec = localDateTime.Second(); |
|
3741 res.tm_min = localDateTime.Minute(); |
|
3742 res.tm_hour = localDateTime.Hour(); |
|
3743 res.tm_mday = localDateTime.Day() + 1; // non-zero based index for tm struct |
|
3744 res.tm_mon = localDateTime.Month(); |
|
3745 res.tm_year = localDateTime.Year() - 1900; |
|
3746 // Symbian's timezone server doesn't know how to handle DST before year 1997 |
|
3747 if (res.tm_year < 97) |
|
3748 res.tm_isdst = -1; |
|
3749 brokenDown = &res; |
|
3750 } |
3741 } |
3751 } |
3742 #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) |
3752 #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) |
3743 // use the reentrant version of localtime() where available |
3753 // use the reentrant version of localtime() where available |
3744 tzset(); |
3754 tzset(); |
3745 tm res; |
3755 tm res; |
3810 res.tm_isdst = (int)isdst; |
3820 res.tm_isdst = (int)isdst; |
3811 brokenDown = &res; |
3821 brokenDown = &res; |
3812 #elif defined(Q_OS_SYMBIAN) |
3822 #elif defined(Q_OS_SYMBIAN) |
3813 // months and days are zero index based |
3823 // months and days are zero index based |
3814 _LIT(KUnixEpoch, "19700000:000000.000000"); |
3824 _LIT(KUnixEpoch, "19700000:000000.000000"); |
3815 TTimeIntervalSeconds utcOffset = TTimeIntervalSeconds(0 - User::UTCOffset().Int()); |
|
3816 TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); |
3825 TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); |
3817 TTime epochTTime; |
3826 TTime epochTTime; |
3818 TInt err = epochTTime.Set(KUnixEpoch); |
3827 TInt err = epochTTime.Set(KUnixEpoch); |
3819 tm res; |
3828 tm res; |
3820 if(err == KErrNone) { |
3829 if(err == KErrNone) { |
3821 TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; |
3830 TTime localTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; |
3822 utcTTime = utcTTime + utcOffset; |
3831 RTz tz; |
3823 TDateTime utcDateTime = utcTTime.DateTime(); |
3832 if (KErrNone == tz.Connect()) { |
3824 res.tm_sec = utcDateTime.Second(); |
3833 if (KErrNone == tz.ConvertToUniversalTime(localTTime)) { |
3825 res.tm_min = utcDateTime.Minute(); |
3834 TDateTime utcDateTime = localTTime.DateTime(); |
3826 res.tm_hour = utcDateTime.Hour(); |
3835 res.tm_sec = utcDateTime.Second(); |
3827 res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct |
3836 res.tm_min = utcDateTime.Minute(); |
3828 res.tm_mon = utcDateTime.Month(); |
3837 res.tm_hour = utcDateTime.Hour(); |
3829 res.tm_year = utcDateTime.Year() - 1900; |
3838 res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct |
3830 res.tm_isdst = (int)isdst; |
3839 res.tm_mon = utcDateTime.Month(); |
3831 brokenDown = &res; |
3840 res.tm_year = utcDateTime.Year() - 1900; |
|
3841 res.tm_isdst = (int)isdst; |
|
3842 brokenDown = &res; |
|
3843 } |
|
3844 tz.Close(); |
|
3845 } |
3832 } |
3846 } |
3833 #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) |
3847 #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) |
3834 // use the reentrant version of gmtime() where available |
3848 // use the reentrant version of gmtime() where available |
3835 tm res; |
3849 tm res; |
3836 brokenDown = gmtime_r(&secsSince1Jan1970UTC, &res); |
3850 brokenDown = gmtime_r(&secsSince1Jan1970UTC, &res); |