4

我正在使用 php5 脚本从 Oracle 数据库中检索数据。我希望返回特定的时间戳格式。我在 SO 上找到了答案,说类似于 Oracle 本身的声明可以解决问题:

$stid = oci_parse ($connection, "alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss.ff3'");
oci_execute ($stid);

这应该确保后续查询像

$stid = oci_parse ($connection, 'select * from table');
oci_execute ($stid);

导致时间戳格式以正确的格式返回。

但无论我做什么,我总是得到像这样的格式

28-NOV-12 05:37:24.000000 PM

所以我的问题是:怎么了?在 php 中执行什么语句以确保检索所需的时间戳格式?

附带问题:如何确保 php 检索 ISO 8601 格式的时间戳,因此字符串如2012-11-28T17:37:24.000Z

在这种情况下如何确保'Z',因此不是像2012-11-28T16:37:24.000+01:00这样的字符串?

4

2 回答 2

4

ff3对数据类型无效DATE,因为它不包含小数秒。

至于您的 ISO8601 格式,只有TIMESTAMP WITH TIME ZONE一个实际的时区。如果你想用 Z(即 UTC)格式化,你可以这样做;

ALTER SESSION SET TIME_ZONE = 'UTC';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"';

然后,当您选择 a 时TIMESTAMP WITH TIME ZONE,您将以该格式获得它。

如果您需要格式化DATETIMESTAMP类似的,您可以使用格式来伪造时区部分;

ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss".000Z"'
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'

SQLfiddle 在这里进行测试

于 2013-02-04T16:57:39.080 回答
1

使用函数:TO_CHAR

示例:to_char(<>,'YYYY-MM-DD"T"HH24:MI:SS:FF3"Z"')

文件:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions200.htm#SQLRF06129

格式模型:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements004.htm#i34510

于 2013-02-04T15:53:18.703 回答