Parse microseconds

This commit is contained in:
rfm 2024-01-26 15:30:31 +00:00
parent 527735d95a
commit aa3262a521

View file

@ -118,7 +118,7 @@ newDateFromBuffer(const char *b, int l)
{
NSCalendarDate *d;
NSTimeZone *zone = nil;
int milliseconds = 0;
int microseconds = 0;
int day;
int month;
int year;
@ -191,11 +191,17 @@ newDateFromBuffer(const char *b, int l)
{
i++;
if (i >= l || !isdigit(b[i])) return nil;
milliseconds = b[i++] - '0';
milliseconds *= 10;
if (i < l && isdigit(b[i])) milliseconds += b[i++] - '0';
milliseconds *= 10;
if (i < l && isdigit(b[i])) milliseconds += b[i++] - '0';
microseconds = b[i++] - '0';
microseconds *= 10;
if (i < l && isdigit(b[i])) microseconds += b[i++] - '0';
microseconds *= 10;
if (i < l && isdigit(b[i])) microseconds += b[i++] - '0';
microseconds *= 10;
if (i < l && isdigit(b[i])) microseconds += b[i++] - '0';
microseconds *= 10;
if (i < l && isdigit(b[i])) microseconds += b[i++] - '0';
microseconds *= 10;
if (i < l && isdigit(b[i])) microseconds += b[i++] - '0';
while (i < l && isdigit(b[i]))
i++;
}
@ -275,6 +281,13 @@ newDateFromBuffer(const char *b, int l)
second: second
timeZone: zone];
/* Postgres support six digits precision, but the ObjC APIs tend
* to use milliseconds. For now, truncate.
*/
if (microseconds > 0)
{
int milliseconds = microseconds / 1000;
if (milliseconds > 0)
{
NSTimeInterval ti;
@ -286,6 +299,7 @@ newDateFromBuffer(const char *b, int l)
[d setTimeZone: zone];
}
}
}
[d setCalendarFormat: @"%Y-%m-%d %H:%M:%S %z"];
return d;
}