Java 数据类型为“时间戳(6)和本地时区”的oracle 11g在windows和linux中以csv格式归档了不同的数据

Java 数据类型为“时间戳(6)和本地时区”的oracle 11g在windows和linux中以csv格式归档了不同的数据,java,linux,windows,oracle,timestamp,Java,Linux,Windows,Oracle,Timestamp,我在Oracle11g中有一列,它的数据类型是带有本地时区的时间戳(6),其中的数据是 01-JAN-03 02.00.00.000000000上午 2016年4月7日下午12.32.32.996000000 2016年5月2日12.06.42.219000000下午 02-5-16 03.03.20.796000000下午 当我使用此代码在Windows中存档此数据时- TIMESTAMPLTZ columnValue = (TIMESTAMPLTZ) row.getValues()[

我在Oracle11g中有一列,它的数据类型是带有本地时区的时间戳(6),其中的数据是

01-JAN-03 02.00.00.000000000上午

2016年4月7日下午12.32.32.996000000

2016年5月2日12.06.42.219000000下午

02-5-16 03.03.20.796000000下午

当我使用此代码在Windows中存档此数据时-

    TIMESTAMPLTZ columnValue = (TIMESTAMPLTZ) row.getValues()[pos];
     String timestamp = columnValue.toString(connection, columnValue.getBytes());

    public static String toString(Connection var0, byte[] var1) throws SQLException {
            return toString(var0, var1, (Calendar)null);
        }
 public static String toString(Connection var0, byte[] var1, Calendar var2) throws SQLException {
        Calendar var3 = toCalendar(var0, (Calendar)null, var1, var2);
        int var4 = var3.get(1);
        int var5 = var3.get(2) + 1;
        int var6 = var3.get(5);
        int var7 = var3.get(11);
        int var8 = var3.get(12);
        int var9 = var3.get(13);
        int var10 = -1;
        if(var1.length == SIZE_TIMESTAMPLTZ) {
            var10 = TIMESTAMP.getNanos(var1, 7);
        }

        return TIMESTAMPTZ.toString(var4, var5, var6, var7, var8, var9, var10, var3.getTimeZone().getID());
    }
这里toString()函数是TIMESTAMPLTZ类的函数。我正在使用metamodal来归档数据。
WINDOWS
中csv文件中的存档数据如下所示-

2003-01-01 02:00:00亚洲/加尔各答

2016-04-07 12:32:32.996亚洲/加尔各答

2016-05-02 12:06:42.219亚洲/加尔各答

2016-05-02 15:03:20.796亚洲/加尔各答

使用相同的代码,我在
LINUX
中归档相同的数据。csv文件显示如下数据:-

2002-12-31 20:30:00GMT

2016-04-07 07:02:32.996格林威治标准时间

2016-05-02 06:36:42.219格林威治标准时间

2016-05-02 09:33:20.796格林威治标准时间

在Linux中我可以做什么来获得与windows中相同的csv数据? 提前谢谢

编辑

当我执行
columnValue.toString()时
语句my colvalue.getBytes()是
120116,4,7,8,3,33,59,93,-63,0
在linux和windows中,我在windows中得到
2016-04-07 12:32:32.996 Asia/Calcutta
结果,在linux中得到相同的值
2016-04-07 07 07:02:32.996 GMT
结果。 在linux中如何才能获得与windows相同的结果。

数据类型
带有本地时区的时间戳(6)
表示时间总是显示在您的本地时区中。因此,您不能修改它的输出时区

为了在“亚洲/加尔各答”中得到它,你可以

  • 在执行查询之前更改您的
    SESSIONTIMEZONE
    ,即

    ALTER SESSION SET TIME_ZONE='亚洲/加尔各答'

  • 连接到数据库之前,在计算机上设置
    Asia/Calcutta
    时区环境,即
    export ORA_SDTZ=Asia/Calcutta

  • 将值转换为时区,然后将其转换为“亚洲/加尔各答”,即

    TO_CHAR(‘亚洲/加尔各答’,‘yyyy-mm-dd hh24:mi:ss-tzr’,‘本地时区的时间戳为SYSTIMESTAMP,本地时区的时间戳为SYSTIMESTAMP,本地时区的时间戳为时间戳)


  • 答错