Would this be correct?
DatumGetTimestamp(DirectFunctionCall3(timestamp_in, CStringGetDatum(time),
PointerGetDatum(0), Int32GetDatum(MAX_TIMESTAMP_PRECISION)));
This is how timestamp_in starts, *#ifdef NOT_USED* is a litle bit confusing.
Datum timestamp_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
#ifdef NOT_USED
Oid typelem = PG_GETARG_OID(1);
#endif
int32 typmod = PG_GETARG_INT32(2);