summaryrefslogtreecommitdiff
path: root/indra/llcommon/lldate.cpp
diff options
context:
space:
mode:
authorMike Antipov <mantipov@productengine.com>2010-06-15 11:15:51 +0300
committerMike Antipov <mantipov@productengine.com>2010-06-15 11:15:51 +0300
commitd1cb678bac7805f7ceef1d711c7cb49731d6ccb4 (patch)
tree4c282dfa2da46461cff9135a0af93d18cfe43dff /indra/llcommon/lldate.cpp
parent0ec92fb1c8a90d619d0102d0807a32abedc916f1 (diff)
parentb3fc9c79f559c84893dede3ce643ac0dfd1f3d65 (diff)
Merge from default branch
--HG-- branch : product-engine
Diffstat (limited to 'indra/llcommon/lldate.cpp')
-rw-r--r--indra/llcommon/lldate.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp
index de7f2ead74..a7ef28b431 100644
--- a/indra/llcommon/lldate.cpp
+++ b/indra/llcommon/lldate.cpp
@@ -248,8 +248,27 @@ bool LLDate::fromStream(std::istream& s)
s >> fractional;
seconds_since_epoch += fractional;
}
- c = s.get(); // skip the Z
- if (c != 'Z') { return false; }
+
+ c = s.peek(); // check for offset
+ if (c == '+' || c == '-')
+ {
+ S32 offset_sign = (c == '+') ? 1 : -1;
+ S32 offset_hours = 0;
+ S32 offset_minutes = 0;
+ S32 offset_in_seconds = 0;
+
+ s >> offset_hours;
+
+ c = s.get(); // skip the colon a get the minutes if there are any
+ if (c == ':')
+ {
+ s >> offset_minutes;
+ }
+
+ offset_in_seconds = (offset_hours * 60 + offset_sign * offset_minutes) * 60;
+ seconds_since_epoch -= offset_in_seconds;
+ }
+ else if (c != 'Z') { return false; } // skip the Z
mSecondsSinceEpoch = seconds_since_epoch;
return true;