error,
<literal>PGTYPESInvalidTimestamp</literal> is returned and <varname>errno</varname> is
set to <literal>PGTYPES_TS_BAD_TIMESTAMP</literal>. See <xref linkend="pgtypesinvalidtimestamp"/> for important notes on this value.
</para>
<para>
In general, the input string can contain any combination of an allowed
date specification, a whitespace character and an allowed time
specification. Note that time zones are not supported by ECPG. It can
parse them but does not apply any calculation as the
<productname>PostgreSQL</productname> server does for example. Timezone
specifiers are silently discarded.
</para>
<para>
<xref linkend="ecpg-pgtypestimestamp-from-asc-example-table"/> contains a few examples for input strings.
</para>
<table id="ecpg-pgtypestimestamp-from-asc-example-table">
<title>Valid Input Formats for <function>PGTYPEStimestamp_from_asc</function></title>
<tgroup cols="2">
<thead>
<row>
<entry>Input</entry>
<entry>Result</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>1999-01-08 04:05:06</literal></entry>
<entry><literal>1999-01-08 04:05:06</literal></entry>
</row>
<row>
<entry><literal>January 8 04:05:06 1999 PST</literal></entry>
<entry><literal>1999-01-08 04:05:06</literal></entry>
</row>
<row>
<entry><literal>1999-Jan-08 04:05:06.789-8</literal></entry>
<entry><literal>1999-01-08 04:05:06.789 (time zone specifier ignored)</literal></entry>
</row>
<row>
<entry><literal>J2451187 04:05-08:00</literal></entry>
<entry><literal>1999-01-08 04:05:00 (time zone specifier ignored)</literal></entry>
</row>
</tbody>
</tgroup>
</table>
</listitem>
</varlistentry>
<varlistentry id="pgtypestimestamptoasc">
<term><function>PGTYPEStimestamp_to_asc</function></term>
<listitem>
<para>
Converts a date to a C char* string.
<synopsis>
char *PGTYPEStimestamp_to_asc(timestamp tstamp);
</synopsis>
The function receives the timestamp <literal>tstamp</literal> as
its only argument and returns an allocated string that contains the
textual representation of the timestamp.
The result must be freed with <function>PGTYPESchar_free()</function>.
</para>
</listitem>
</varlistentry>
<varlistentry id="pgtypestimestampcurrent">
<term><function>PGTYPEStimestamp_current</function></term>
<listitem>
<para>
Retrieve the current timestamp.
<synopsis>
void PGTYPEStimestamp_current(timestamp *ts);
</synopsis>
The function retrieves the current timestamp and saves it into the
timestamp variable that <literal>ts</literal> points to.
</para>
</listitem>
</varlistentry>
<varlistentry id="pgtypestimestampfmtasc">
<term><function>PGTYPEStimestamp_fmt_asc</function></term>
<listitem>
<para>
Convert a timestamp variable to a C char* using a format mask.
<synopsis>
int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, char *fmtstr);
</synopsis>
The function receives a pointer to the timestamp to convert as its
first argument (<literal>ts</literal>), a pointer to the output buffer
(<literal>output</literal>), the maximal length that has been allocated for
the output buffer (<literal>str_len</literal>) and the format mask to
use for the conversion (<literal>fmtstr</literal>).
</para>
<para>
Upon success, the function returns 0 and a negative value if an
error occurred.
</para>
<para>
You can use the following format specifiers for the format mask. The