Java 如何通过jdbc在PostgreSQL中使用Before Christ date编写时间戳?

Java 如何通过jdbc在PostgreSQL中使用Before Christ date编写时间戳?,java,postgresql,jdbc,timestamp,Java,Postgresql,Jdbc,Timestamp,我尝试用PostgreSQL中的PreparedStatement编写基督诞生前的日期,但失败了。 有什么诀窍可以做到这一点吗 Postgres中的字段是不带时区的时间戳 当我试图通过语句将其作为字符串写入时,比如SQL插入public.tstest1(ts1)值(“'2014-01-11 14:00:08.354 BC'”)-它可以工作。 但是我不能用commonResultSet正确地检索它-它丢失了“BC”部分,并且错误地显示了日期或年份-在任何情况下-它在Anno Domini AD中工

我尝试用PostgreSQL中的
PreparedStatement
编写基督诞生前的日期,但失败了。 有什么诀窍可以做到这一点吗

Postgres中的字段是不带时区的时间戳

当我试图通过
语句
将其作为字符串写入时,比如SQL
插入public.tstest1(ts1)值(“'2014-01-11 14:00:08.354 BC'”)
-它可以工作。 但是我不能用common
ResultSet
正确地检索它-它丢失了“BC”部分,并且错误地显示了日期或年份-在任何情况下-它在Anno Domini AD中工作

我用
SimpleDateFormat
检查,在准备
java.sql.Timestamp
和2014年BC一样的
新时间戳(-2014-1900+1,01,01,01,01,01)之后,我在输出中获得了BC日期

但在写入数据库后无法实现相同的功能

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO public.tstest1(ts1) VALUES (?)");        

    Timestamp tsBC = new Timestamp(-2014-1900+1, 01, 01, 01, 01, 01, 01);
    Date dt1 = new Date(tsBC.getTime());
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm z G");
    System.out.println(sdf.format(dt1));

    pstmt.setTimestamp(1, tsBC);
    pstmt.execute();

    pstmt.clearParameters();

    pstmt.setDate(1, dt1);
    pstmt.execute();

    pstmt.clearParameters();
    pstmt.setObject(1, dt1);
    pstmt.execute();

    pstmt.clearParameters();
    pstmt.setObject(1, tsBC);
    pstmt.execute();

    pstmt.close();
    conn.close();

您尚未向我们展示如何检索和显示
ts1
字段。我试过你的例子,效果很好。我使用
getString()
检索
ts1
字段,它显示如下值

"2014-03-04 05:06:07 BC"
当我使用
getTimestamp()
检索它时,我检索的值与我插入的值相同,并且使用您的
SimpleDataFormat
将其显示为:

2014/03/04 05:06 CET p.n.e.
其中
p.n.e.
表示波兰语中的BC(我的地区)


我使用PostgreSQL 9.3和
PostgreSQL-9.3-1100.jdbc41.jar

谢谢你的回答,兄弟。解决方案是使用最新版本的9.x jdbc驱动程序。我在pg74上遇到了老版本的问题。