mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-17 19:25:53 +02:00
- fixed GH# 116: Wrong timezone parsing in DateTimeParse (fix by Matej Knopp)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// DateTimeParser.cpp
|
||||
//
|
||||
// $Id: //poco/1.4/Foundation/src/DateTimeParser.cpp#4 $
|
||||
// $Id: //poco/1.4/Foundation/src/DateTimeParser.cpp#5 $
|
||||
//
|
||||
// Library: Foundation
|
||||
// Package: DateTime
|
||||
@@ -304,6 +304,7 @@ int DateTimeParser::parseTZD(std::string::const_iterator& it, const std::string:
|
||||
{"AWDT", 9*3600}
|
||||
};
|
||||
|
||||
int tzd = 0;
|
||||
while (it != end && Ascii::isSpace(*it)) ++it;
|
||||
if (it != end)
|
||||
{
|
||||
@@ -317,10 +318,13 @@ int DateTimeParser::parseTZD(std::string::const_iterator& it, const std::string:
|
||||
for (unsigned i = 0; i < sizeof(zones)/sizeof(Zone); ++i)
|
||||
{
|
||||
if (designator == zones[i].designator)
|
||||
return zones[i].timeZoneDifferential;
|
||||
{
|
||||
tzd = zones[i].timeZoneDifferential;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (*it == '+' || *it == '-')
|
||||
if (it != end && (*it == '+' || *it == '-'))
|
||||
{
|
||||
int sign = *it == '+' ? 1 : -1;
|
||||
++it;
|
||||
@@ -329,10 +333,10 @@ int DateTimeParser::parseTZD(std::string::const_iterator& it, const std::string:
|
||||
if (it != end && *it == ':') ++it;
|
||||
int minutes = 0;
|
||||
PARSE_NUMBER_N(minutes, 2);
|
||||
return sign*(hours*3600 + minutes*60);
|
||||
tzd += sign*(hours*3600 + minutes*60);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return tzd;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// DateTimeParserTest.cpp
|
||||
//
|
||||
// $Id: //poco/1.4/Foundation/testsuite/src/DateTimeParserTest.cpp#4 $
|
||||
// $Id: //poco/1.4/Foundation/testsuite/src/DateTimeParserTest.cpp#5 $
|
||||
//
|
||||
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
|
||||
// and Contributors.
|
||||
@@ -341,6 +341,15 @@ void DateTimeParserTest::testRFC1123()
|
||||
assert (dt.minute() == 17);
|
||||
assert (dt.second() == 30);
|
||||
assert (tzd == -14400);
|
||||
|
||||
dt = DateTimeParser::parse(DateTimeFormat::RFC1123_FORMAT, "Sun, 20 Jul 1969 16:17:30 GMT+01:00", tzd);
|
||||
assert (dt.year() == 1969);
|
||||
assert (dt.month() == 7);
|
||||
assert (dt.day() == 20);
|
||||
assert (dt.hour() == 16);
|
||||
assert (dt.minute() == 17);
|
||||
assert (dt.second() == 30);
|
||||
assert (tzd == 3600);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user