当前位置: 首页 > 知识库问答 >
问题:

在多时区服务器上使用JDBC时,我应该选择哪种oracle日期数据类型?

左丘修齐
2023-03-14

我有一个Oracle数据库,它的时区与服务器的时区不同。服务器本身具有不同的时区。

要创建具有不同日期类型的表,请执行以下操作:

create table ALIK_TZ (
  D date default sysdate,
  t timestamp default systimestamp,
  tz timestamp with time zone default systimestamp,
  ltz timestamp with local time zone default systimestamp
);

插入值:

insert into ALIK_TZ (d) values (default);

查询:

select to_char(d, 'DD-MON-YYYY HH24:MI:SS') D_SECS, ALIK_TZ.* from ALIK_TZ;
"D_SECS"     "D"        "T"         "TZ"                            "LTZ"
"01-JUN-2016 06:14:04"  01-JUN-16   01-JUN-16 06.14.04.920000000 AM 01-JUN-16 06.14.04.920000000 AM -07:00  01-JUN-16 04.14.04.920000000 PM
"01-JUN-2016 06:20:54"  01-JUN-16   01-JUN-16 06.20.54.181000000 AM 01-JUN-16 06.20.54.181000000 AM -07:00  01-JUN-16 04.20.54.181000000 PM
preparedStatement = conn.prepareStatement("select * from ALIK_TZ");
resultSet = preparedStatement.executeQuery();
D->java.sql.Timestamp(01-JUN-2016 06:14:04)
T->java.sql.Timestamp(2016-06-01 06:14:04.92)
TZ->oracle.sql.TIMESTAMPTZ
LTZ->oracle.sql.TIMESTAMPTZ

*顺便说一句,使用longs(从1970 UTC开始的millis)是可以使用的,但在查看DB中的数据时确实很麻烦。

共有1个答案

竺鸿骞
2023-03-14

我个人的建议是在数据库端使用timestamp WITH TIME zone,在Java端使用Java.TIME.zoneddatetime。这使您与任何服务器和客户端设置无关,并允许以后在决定转换到任何时区时转换。

唯一的问题是在将来计算和存储日期的时候,以及特定时区更改的时区规则。但是,如果你足够早地发现这一点,这是可以纠正的。

 类似资料:
  • 我使用react datepicker让用户选择一个日期。然而,现在它使用本地时间(PDT),但我想将其硬编码为使用特定时区(PST)。 我尝试使用prop,但它似乎没有任何作用。有人知道如何做到这一点吗?

  • 我想禁用日期时间选择器中的时间选择器。我正在使用一些参数,如picTime: false和form:"dd MM yyyy"。但是没有用...我正在使用http://eonasdan.github.io/bootstrap-datetimepicker/ Plzz给出解决方案

  • 问题内容: Java 8中有一整套日期类: ; ; ; ; ; 。 我已经忽略了他们的JavaDocs,并注意所有这些类都包含我需要的所有方法。因此,目前,我可以随机选择它们。但是我想为什么有6个单独的类并且每个类都专用于特定目的是有原因的。 技术信息和要求: 输入为,将转换为这些日期格式之一。 我不需要显示时区,但是当我比较两个日期时,能够正确比较纽约和巴黎的时间很重要。 精确的级别是秒,无需使

  • 日期时间选择器是一个定制的picker,因此他的用法和picker完全一致。打开picker的默认值是当前时间,可以通过value参数指定 datetime-picker 定制了 onChange 和 cols 参数,请不要设置这两个参数。 <input type="text" id='datetime-picker'/> <script>   $("#datetime-picker").da

  • 问题内容: 在Android中使用日期选择器时选择错误的日期日期选择器对话框将日期选择为 2018/55/10 有时会选择正确的日期,但大多数情况下会选择错误的日期 问题答案: 您在日期格式中犯了一个常见错误:是分钟,用于获取月份。