Merge "sync code for tizen_2.2" into devel_3.0_main
[platform/framework/native/appfw.git] / src / locales / FLcl_TimeZoneImpl.cpp
index e4b3c45..b117542 100644 (file)
@@ -23,6 +23,8 @@
 #include <unicode/timezone.h>
 #include <unicode/basictz.h>
 #include <unicode/simpletz.h>
+#include <unicode/tztrans.h>
+#include <unicode/tzrule.h>
 
 #include <FBaseInteger.h>
 #include <FBaseSysLog.h>
@@ -142,6 +144,29 @@ _TimeZoneImpl::_TimeZoneImpl(U_ICU_NAMESPACE::TimeZone* pIcuTimeZone, UDate icuD
                                __dstSaving = pIcuTz->getDSTSavings() / ONE_MIN_IN_MILLISEC;
                        }
                }
+               else
+               {
+                       U_ICU_NAMESPACE::TimeZoneTransition transition;
+                       bool result = pIcuTz->getPreviousTransition(icuDate, true, transition);
+                       if (result)
+                       {
+                               const U_ICU_NAMESPACE::TimeZoneRule* pTzFromRule = transition.getFrom();
+                               const U_ICU_NAMESPACE::TimeZoneRule* pTzToRule = transition.getTo();
+
+                               if (pTzFromRule->getDSTSavings())
+                               {
+                                       __dstSaving = pTzFromRule->getDSTSavings() / ONE_MIN_IN_MILLISEC;
+                               }
+                               else if (pTzToRule->getDSTSavings())
+                               {
+                                       __dstSaving = pTzToRule->getDSTSavings() / ONE_MIN_IN_MILLISEC;
+                               }
+                               else //if (pTzFromRule->getDSTSavings() == 0 && pTzToRule->getDSTSavings() == 0)
+                               {
+                                       __dstSaving = 0;
+                               }
+                       }
+               }
                delete pInitial;
                delete pStd;
                delete pDst;
@@ -404,7 +429,8 @@ _TimeZoneImpl::GetOffset(long long ticks, int& offset) const
 {
        TimeSpan ts(ticks);
        DateTime date;
-       date.SetValue(ts.GetTicks());
+       result r = date.SetValue(ts.GetTicks());
+       SysTryReturnResult(NID_LCL, r == E_SUCCESS, E_INVALID_ARG, "It is an invalid argument.");
 
        int rawOffset = 0;
        int dstOffset = 0;