date serialization fails with non-standard locales
I'm not sure if this is a bug or if I'm misusing the library. It seems that serializing boost::posix_time_ptime fails when using non-standard locale (Windows Xp OS - vc 7.1 compiler - boost updated from CVS few days ago). As an example, try adding std::locale::global( std::locale( "en" ) ); as the first line of the testtime_serialize.cpp; this causes the test to fail when doing ia >> pt2; I tried to understand what was happening, and it seems to me that the problem is in keeping into account locale when serializing, while ignoring it while unserializing. In greg_serialize.hpp to_iso_string(d) may generate something like "2,0050527"; the method from_undelimited_string(ds) used to load the serialized date, expects a 4,2,2 format. Paolo
On Sat, 28 May 2005 02:10:02 +0200, Paolo Coletta wrote
I'm not sure if this is a bug or if I'm misusing the library. It seems that serializing boost::posix_time_ptime fails when using non-standard locale (Windows Xp OS - vc 7.1 compiler - boost updated from CVS few days ago).
As an example, try adding
std::locale::global( std::locale( "en" ) );
as the first line of the testtime_serialize.cpp; this causes the test to fail when doing
ia >> pt2;
I tried to understand what was happening, and it seems to me that the problem is in keeping into account locale when serializing, while ignoring it while unserializing. In greg_serialize.hpp to_iso_string(d) may generate something like "2,0050527"; the method from_undelimited_string(ds) used to load the serialized date, expects a 4,2,2 format.
It looks like the problem is that the stream output is including a thousands seperator when it shouldn't. The serialization should be 20050527 with no number seperators. So it appears that we cannot depend on the stream not using the thousands separtor in date_time/date_formatting.hpp (line 81) where the year is actully output: std::basic_ostringstream<charT> ss; ss << ymd.year; We'll look into fixing this... Jeff
The serialization code for text archives (inluding xml) should be setting the local to an included "null locale" just to address situations like this. I'm not sure why its not working here. Robert Ramey Jeff Garland wrote:
On Sat, 28 May 2005 02:10:02 +0200, Paolo Coletta wrote
I'm not sure if this is a bug or if I'm misusing the library. It seems that serializing boost::posix_time_ptime fails when using non-standard locale (Windows Xp OS - vc 7.1 compiler - boost updated from CVS few days ago).
As an example, try adding
std::locale::global( std::locale( "en" ) );
as the first line of the testtime_serialize.cpp; this causes the test to fail when doing
ia >> pt2;
I tried to understand what was happening, and it seems to me that the problem is in keeping into account locale when serializing, while ignoring it while unserializing. In greg_serialize.hpp to_iso_string(d) may generate something like "2,0050527"; the method from_undelimited_string(ds) used to load the serialized date, expects a 4,2,2 format.
It looks like the problem is that the stream output is including a thousands seperator when it shouldn't. The serialization should be 20050527 with no number seperators. So it appears that we cannot depend on the stream not using the thousands separtor in date_time/date_formatting.hpp (line 81) where the year is actully output:
std::basic_ostringstream<charT> ss; ss << ymd.year;
We'll look into fixing this...
Jeff
On Sat, 28 May 2005 08:19:57 -0700, Robert Ramey wrote
The serialization code for text archives (inluding xml) should be setting the local to an included "null locale" just to address situations like this. I'm not sure why its not working here.
We use an internal stringstream to convert the date to a string which is then serialized into the archive -- it's our internal stringstream that is apparently the problem. Jeff
participants (3)
-
Jeff Garland
-
Paolo Coletta
-
Robert Ramey