Browse Source

Factoring out DSTDifferenceForTime

Source commit: 6242f576ef869401f2de6621a7ed4bbe560a9783
Martin Prikryl 10 years ago
parent
commit
b9be0ff860
2 changed files with 20 additions and 16 deletions
  1. 19 16
      source/core/Common.cpp
  2. 1 0
      source/core/Common.h

+ 19 - 16
source/core/Common.cpp

@@ -1557,8 +1557,7 @@ TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode)
 
 
   if ((DSTMode == dstmUnix) || (DSTMode == dstmKeep))
   if ((DSTMode == dstmUnix) || (DSTMode == dstmKeep))
   {
   {
-    Result -= (IsDateInDST(Result) ?
-      Params->DaylightDifference : Params->StandardDifference);
+    Result -= DSTDifferenceForTime(Result);
   }
   }
 
 
   return Result;
   return Result;
@@ -1734,9 +1733,7 @@ TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime)
 {
 {
 
 
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
-  DateTime +=
-    (IsDateInDST(DateTime) ?
-      Params->DaylightDifference : Params->StandardDifference);
+  DateTime += DSTDifferenceForTime(DateTime);
   DateTime += Params->BaseDifference;
   DateTime += Params->BaseDifference;
 
 
   if (Params->DaylightHack)
   if (Params->DaylightHack)
@@ -1752,9 +1749,7 @@ TDateTime __fastcall ConvertTimestampFromUTC(TDateTime DateTime)
 {
 {
 
 
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
-  DateTime -=
-    (IsDateInDST(DateTime) ?
-      Params->DaylightDifference : Params->StandardDifference);
+  DateTime -= DSTDifferenceForTime(DateTime);
   DateTime -= Params->BaseDifference;
   DateTime -= Params->BaseDifference;
 
 
   if (Params->DaylightHack)
   if (Params->DaylightHack)
@@ -1782,6 +1777,21 @@ __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
   return Result;
   return Result;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
+double __fastcall DSTDifferenceForTime(TDateTime DateTime)
+{
+  double Result;
+  const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
+  if (IsDateInDST(DateTime))
+  {
+    Result = Params->DaylightDifference;
+  }
+  else
+  {
+    Result = Params->StandardDifference;
+  }
+  return Result;
+}
+//---------------------------------------------------------------------------
 TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode)
 TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode)
 {
 {
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
   const TDateTimeParams * Params = GetDateTimeParams(DecodeYear(DateTime));
@@ -1810,14 +1820,7 @@ TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode
   {
   {
     if (DSTMode == dstmWin)
     if (DSTMode == dstmWin)
     {
     {
-      if (IsDateInDST(DateTime))
-      {
-        DateTime = DateTime + Params->DaylightDifference;
-      }
-      else
-      {
-        DateTime = DateTime + Params->StandardDifference;
-      }
+      DateTime = DateTime + DSTDifferenceForTime(DateTime);
     }
     }
   }
   }
 
 

+ 1 - 0
source/core/Common.h

@@ -165,6 +165,7 @@ enum TDSTMode
 bool __fastcall UsesDaylightHack();
 bool __fastcall UsesDaylightHack();
 TDateTime __fastcall EncodeDateVerbose(Word Year, Word Month, Word Day);
 TDateTime __fastcall EncodeDateVerbose(Word Year, Word Month, Word Day);
 TDateTime __fastcall EncodeTimeVerbose(Word Hour, Word Min, Word Sec, Word MSec);
 TDateTime __fastcall EncodeTimeVerbose(Word Hour, Word Min, Word Sec, Word MSec);
+double __fastcall DSTDifferenceForTime(TDateTime DateTime);
 TDateTime __fastcall SystemTimeToDateTimeVerbose(const SYSTEMTIME & SystemTime);
 TDateTime __fastcall SystemTimeToDateTimeVerbose(const SYSTEMTIME & SystemTime);
 TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
 TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
 TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime);
 TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime);