gpt4 book ai didi

java - 数据类型为 `TIMESTAMP(6) with Local Time Zone` 的 oracle 11g 在 csv 中存档了 Windows 和 Linux 中的不同数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:09 26 4
gpt4 key购买 nike

我在 oracle 11g 中有一个列,其数据类型为 TIMESTAMP(6) with Local Time Zone,其中的数据是

01-JAN-03 02.00.00.000000000 AM

07-APR-16 12.32.32.996000000 PM

02-MAY-16 12.06.42.219000000 PM

02-MAY-16 03.03.20.796000000 PM

当我使用此代码在 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 类。我正在使用元模式来存档数据。 WINDOWS 中的 csv 文件中的存档数据显示为 -

2003-01-01 02:00:00 Asia/Calcutta

2016-04-07 12:32:32.996 Asia/Calcutta

2016-05-02 12:06:42.219 Asia/Calcutta

2016-05-02 15:03:20.796 Asia/Calcutta

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

2002-12-31 20:30:00 GMT

2016-04-07 07:02:32.996 GMT

2016-05-02 06:36:42.219 GMT

2016-05-02 09:33:20.796 GMT

我如何在 Linux 中获取与在 Windows 中相同的 csv 数据?提前致谢。

编辑

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

最佳答案

数据类型 TIMESTAMP(6) WITH LOCAL TIME ZONE 表示时间始终(且仅)显示在您本地的时区。因此您不能修改它的输出时区。

为了在“亚洲/加尔各答”中获得它,您可以选择

  1. 在执行查询之前更改您的SESSIONTIMEZONE,即通过

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

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

  3. 将值转换为 TIMEZONE,然后将其转换为“Asia/Calcutta”,即

    TO_CHAR((CAST(CAST(SYSTIMESTAMP AS TIMESTAMP WITH LOCAL TIME ZONE) AS TIMESTAMP WITH TIME ZONE) AT TIME ZONE 'Asia/Calcutta'), 'yyyy-mm-dd hh24:mi:ss tzr' )

关于java - 数据类型为 `TIMESTAMP(6) with Local Time Zone` 的 oracle 11g 在 csv 中存档了 Windows 和 Linux 中的不同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38052261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com