标签: timestamp

如何从 PostgreSQL 获取当前的 unix 时间戳?

Unix 时间戳是自 UTC 时间 1970 年 1 月 1 日午夜以来的秒数。

如何从 PostgreSQL 获取正确的 unix 时间戳?

currenttimestamp.comtimestamp.1e5b.de相比时,我没有从 PostgreSQL 得到预期的时间:

这将返回正确的时间戳:

SELECT extract(epoch from now());
Run Code Online (Sandbox Code Playgroud)

虽然这不会:

SELECT extract(epoch from now() at time zone 'utc');
Run Code Online (Sandbox Code Playgroud)

我住在 UTC +02 时区。从 PostgreSQL 获取当前 unix 时间戳的正确方法是什么?

这将返回正确的时间和时区:

SELECT now();
              now
-------------------------------
 2011-05-18 10:34:10.820464+02
Run Code Online (Sandbox Code Playgroud)

另一个对比:

select now(), 
extract(epoch from now()), 
extract(epoch from now() at time zone 'utc');
              now              |    date_part     |    date_part
-------------------------------+------------------+------------------
 2011-05-18 10:38:16.439332+02 | 1305707896.43933 | 1305700696.43933
(1 …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp

119
推荐指数
2
解决办法
21万
查看次数

now() 和 current_timestamp 的区别

在 PostgreSQL 中,我使用now()andcurrent_timestamp函数,我看不出有什么区别:

# SELECT now(), current_timestamp;
              now               |              now               
--------------------------------+--------------------------------
 04/20/2014 19:44:27.215557 EDT | 04/20/2014 19:44:27.215557 EDT
(1 row)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

postgresql timestamp

69
推荐指数
1
解决办法
7万
查看次数

使用 TIMESTAMP WITHOUT TIME ZONE 的有效用例是什么?

关于两者之间的差异,有一个很长且相当清晰的答案

  • TIMESTAMP WITH TIME ZONE -vs-
  • TIMESTAMP WITHOUT TIME ZONE

在 SO post Ignoring time zone together in Rails and PostgreSQL 中可用。

我想知道的是:实际使用是否有任何有效的用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式?

postgresql timestamp

55
推荐指数
3
解决办法
7万
查看次数

MySQL 将 UTC 时间设置为默认时间戳

如何设置默认值为当前 UTC 时间的时间戳列?

MySQL 使用UTC_TIMESTAMP()UTC 时间戳函数:

mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP()     |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

所以我试过:

CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Run Code Online (Sandbox Code Playgroud)

和其他变体,如UTC_TIMESTAMP(),但没有成功。

mysql syntax timestamp utc-time

41
推荐指数
4
解决办法
14万
查看次数

如何仅在几毫秒内从 PostgreSQL 获取时间戳列?

timestamp without time zone default now()在 PostgreSQL 数据库中有一个类型为“创建”的列。

如果我选择 colums,默认情况下它有一个漂亮且可读的格式:

SELECT created FROM mytable;

         created
---------------------------
2011-05-17 10:40:28.876944
Run Code Online (Sandbox Code Playgroud)

但我想在几毫秒内获得时间戳(作为一个 Long)。像这样的东西:

SELECT myformat(created) FROM mytable;

     created
-----------------
2432432343876944
Run Code Online (Sandbox Code Playgroud)

如何仅在几毫秒内从 PostgreSQL 获取时间戳列?


回复杰克:

我确实得到与您相同的差异(-3600),但是如果我使用timestamp with time zone我可以看到“错误”或差异是因为 '1970-01-01' 获得 time zone +01

create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp date-format

40
推荐指数
2
解决办法
14万
查看次数

如何最好地在 PostgreSQL 中存储时间戳?

我正在研究 PostgreSQL 数据库设计,我想知道如何最好地存储时间戳。

假设

不同时区的用户将使用数据库执行所有 CRUD 功能。

我查看了 2 个选项:

  • timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC')

  • bigint NOT NULL DEFAULT

因为timestamp我会发送一个字符串来表示 INSERT 时刻的确切(UTC)时间戳。

因为bigint我会存储完全相同的东西,但以数字格式存储。(时区问题是在将毫秒移交给服务器之前处理的,因此总是以 UTC 为单位的毫秒。)

存储 a 的一个主要优点bigint可能是它更容易存储和检索,因为传递正确格式的时间戳比简单的数字(自 Unix Epoc 以来的毫秒)更复杂。

我的问题是哪种方法可以实现最灵活的设计,以及每种方法可能存在哪些缺陷。

postgresql datatypes timestamp utc-time timezone

32
推荐指数
2
解决办法
5万
查看次数

在 MySQL 5.5 中不能将日期默认为 CURRENT_TIMESTAMP

我无法设置Current_timestamp为默认值。我的Mysql版本是5.5.47.

查询是

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

虽然它在我的本地数据库上使用mysql V5.6.56.

timestamp default-value mysql-5.5 date

24
推荐指数
2
解决办法
17万
查看次数

如何在没有时区的情况下将 unix 时间转换为 PostgreSQL 的 Timstamp?

我有一个运行在服务器上的 PostgreSQL 数据库,它的时区设置为印度的时区(即 UTC +5:30)

我在一个表中有一些数据,它是这样创建的:

CREATE TABLE "CLOUDDATA"
(
  "CD_Tm_Obs" timestamp without time zone,
  "CD_Avg_Cloud" double precision
)
Run Code Online (Sandbox Code Playgroud)

我想查询数据并获取特定时间的值。我的输入将是 Unix 时间戳(即 1970 年 1 月 1 日的秒数)

转换UNIX时间时间戳我发现的唯一方法是这样的: select to_timestamp(TRUNC(CAST(1395036000 AS bigint)))。但这会创建一个带时区的时间戳。我的数据在 中timestamp without time zone,所以我没有得到任何结果。

如何在没有时区的情况下将 unix 时间转换为 PostgreSQL 的 Timstamp?

postgresql timestamp timezone

18
推荐指数
1
解决办法
6万
查看次数

为什么 Postgres 中的时区在 0001 年与 UTC 有如此疯狂的偏移?

在 Postgres 9.5 中,我很惊讶地看到在尝试 year 0001(没有 year zero 0000)时看到的结果。

的偏移量-07:52:58

一些示例代码。请注意,我混合使用了TIMESTAMP WITH TIME ZONETIMESTAMP WITHOUT TIME ZONE,所以请仔细阅读。

SET TIME ZONE 'America/Los_Angeles' ;

SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0', 
        TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z', 
        TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ;

("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00")
Run Code Online (Sandbox Code Playgroud)

我对第二个值感到惊讶:0001-12-31 16:07:02-07:52:58 BC. 我知道我们必须America/Los_Angeles在 UTC后八小时后退八小时,偏移量为-08:00. 但不是-08:00偏移量是-07:52:58. 为什么?

UTC下没问题

在 UTC 下输入数据时没有这样的问题。

SET TIME ZONE 'UTC' …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp timezone postgresql-9.5

16
推荐指数
1
解决办法
2284
查看次数

CURRENT_TIMESTAMP 可以用作 PRIMARY KEY 吗?

可以CURRENT_TIMESTAMP用作PRIMARY KEY?

是否有可能两个或多个不同的 INSERT 得到相同的结果CURRENT_TIMESTAMP

postgresql database-design primary-key timestamp

15
推荐指数
3
解决办法
7987
查看次数