标签: timestamp-with-timezone

Laravel 中的 timestampTz 字段

Laravel 5.4 支持TIMESTAMP WITH TIME ZONE迁移中的 Postgres字段类型:

$table->timestampTz('scheduled_for');
Run Code Online (Sandbox Code Playgroud)

Laravel 可以设置为将日期字段 ( DATE, DATETIME, TIMESTAMP) 转换为 Carbon 对象(默认情况下为created_atupdated_at TIMESTAMP字段这样做),但放入scheduled_for$dates字段会导致时区感知版本出错:

InvalidArgumentException with message 'Trailing data'
Run Code Online (Sandbox Code Playgroud)

查看数据库和修补程序,该字段的值似乎类似于2017-06-19 19:19:19-04. 是否有一种本地方法可以从这些字段类型之一中获取 Carbon 对象?还是我一直在使用访问器?

laravel timestamp-with-timezone php-carbon

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

将不带时区的时间戳转换为带时区的时间戳

我有一个类型为 nullable 的列timestamp without time zone。它以以下格式存储在我的 Postgres 数据库中:2021-06-24 11:00:00. 我想将其转换为可为空的timestamp with time zone类型,以便将其显示为2021-06-24 11:00:00.000-00. 请注意,没有时区转换。

该解决方案还应该允许从 转换timestamp with time zonetimestamp without time zone。我做了一些研究,但没有找到任何东西。

sql postgresql timestamp timestamp-with-timezone

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

POSIXct和xts中的时区,从R中的GMT转换

xts在索引为POSIXct和时区为GMT 的对象中有一堆1分钟的返回.回报是在纽约证券交易所,所以我想转换到东部时区,但我想妥善照顾夏令时.这样做的最佳方式是什么?我在EST时区和EDT时区之间有点困惑.我想在冬季和夏季将我的时间恰当地转换为纽约时报.

timezone r posixct xts timestamp-with-timezone

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

Postgresql选择带时区的时间戳,但忽略秒

我正在从posgresql数据库中选择一个timestamptz.我希望我的选择只返回日期,小时和分钟.没有秒.我可以在psql select中设置日期格式以适应这种情况吗?

postgresql timestamp-with-timezone

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

在雅典娜上转换为带时区的时间戳失败

我正在尝试创建以下视图:

CREATE OR REPLACE VIEW view_events AS 
(
   SELECT
     "rank"() OVER (PARTITION BY "tb1"."innerid" ORDER BY "tb1"."date" ASC) "r"
   , "tb2"."opcode"
   , "tb1"."innerid"
   , "tb1"."date"
   , From_iso8601_timestamp(tb1.date) as "real_date"
   , "tb2"."eventtype"
   , "tb1"."fuelused"
   , "tb1"."mileage"
   , "tb1"."latitude"
   , "tb1"."longitude"
   FROM
     rt_message_header tb1
   , rt_messages tb2
   WHERE ((("tb1"."uuid" = "tb2"."header_uuid") AND ("tb2"."opcode" = '39')) AND ("tb2"."type" = 'event'))
   ORDER BY "tb1"."innerid" ASC, "tb1"."date" ASC
)
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

您的查询具有以下错误:不支持的配置单元类型:带有时区的时间戳

但是,当我自己运行查询时,它可以正常工作,并且在这里提到From_iso8601_timestamp 作为有效的日期函数。

谁能告诉我我在做什么错?

sql hive date timestamp-with-timezone amazon-athena

6
推荐指数
3
解决办法
7247
查看次数

即时与ZonedDateTime

我只是不太了解在以下示例中应该使用这两个中的哪一个:

我们有OfferEntity一个成员availableDay,该成员是要约可用的日期。

现在,该表将如下所示:

CREATE TABLE IF NOT EXISTS offer (
  created   timestamp with time zone NOT NULL DEFAULT NOW(),
  id        BIGSERIAL PRIMARY KEY,
  available timestamp with time zone
);
Run Code Online (Sandbox Code Playgroud)

PostgreSQL文档中我们知道:

对于timestamp with time zone,内部存储的值始终以UTC(通用协调时间,通常称为格林威治标准时间,GMT)表示。使用该时区的适当偏移量,将指定了明确时区的输入值转换为UTC。如果在输入字符串中未指定时区,则假定该时区位于系统TimeZone参数指示的时区中,并使用时区的偏移量将其转换为UTC。

这意味着在保留任何日期/时间信息时我应该没问题。

但这对我OfferEntity和我定义的REST端点意味着什么OfferController

@Entity
@Table(name = "offer")
public class OfferEntity {    
    @Column(name = "available", nullable = false)
    private ZonedDateTime availableDay;
}
Run Code Online (Sandbox Code Playgroud)

@Entity
@Table(name = "offer")
public class OfferEntity {    
    @Column(name = "available", …
Run Code Online (Sandbox Code Playgroud)

postgresql utc timestamp-with-timezone zoneddatetime java.time.instant

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

PostgreSQL 存储哪些时区信息?

PostgreSQL 文档相当详尽且有用:

https://www.postgresql.org/docs/9.2/datatype-datetime.html#DATATYPE-TIMEZONES

但似乎忽略了一个相当有用的点的清晰度,在这个点上清晰度可能是必要的和有帮助的。阅读了文档和各种相关的 stackoverflow 问题和回复后,我怀疑以下情况是正确的:

PostgreSQL 数据类型timestamp with timezone存储日期和时间以及 utcoffset(+ve 在格林威治以东)

我会进一步推断并怀疑这是真的:

PostgreSQL 数据类型timestamp with timezone将日期和时间以及 utcoffset(+ve 在格林威治以东)存储到分钟分​​辨率。

我的问题与这些推论有关。它们是否正确,如果正确,可以转发哪些证据来证实它们,如果不正确,可以转发哪些相反的证据。

这很有趣的主要原因当然是因为如果为真,那么接受表中pg_timezone_names存储的名称或缩写的时区的 PostgreSQL只存储 UTC 偏移量,从而丢失 DST 信息。

意思是,为了使实际时区名称(如表中定义的pg_timezone_names)将来可供读者使用,它必须与旁边的timestamp with timezone列显式存储在一起。

我现在感兴趣的主要原因是我想到了一种相当聪明的渲染时间方式,可以记录地球上任何地方的事件时间。即如果记录的时间在用户当前时区,则将其报告为一个简单的日期/时间(没有时区信息),并且只有当它在与读者不同的时区中时,才报告时区信息(即使如此,时区名称可能比 UTC 偏移量更用户友好)。

如果我希望在网站上实现这种上下文敏感的渲染,看起来我将不得不在我的事件时间(以及我存储的任何其他时区感知日期/时间)旁边存储时区名称。

但是我对基于推理而非知识做出这样的承诺感到不自在,并且想要一些支持或反驳这些推理的证据。

postgresql timestamp-with-timezone

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

如何在预准备语句中传递带有''(timestamp)的字符串?

我正在尝试执行以下查询

INSERT INTO hotspot(timestamp) VALUES 
(timestamp with time zone '2012-10-25 14:00:00 +05:00' at time zone 'EET');
Run Code Online (Sandbox Code Playgroud)

我想将时间戳作为变量传递.

我的时间戳列是带时区的时间戳类型.

你知道如何做到这一点吗?

当我做...(Java,Postgresql)

    String stm= "INSERT INTO hotspot(timestamp) VALUES(timestamp with time zone ? at time zone 'EET')";
    pst = con.prepareStatement(stm);
    pst.setString(1, "2012-08-24 14:00:00 +05:00");
    pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我在"$ 1"或附近收到语法错误

无论如何我能克服这个错误吗?先感谢您!!

更新:我尝试通过以下方式使用setTimestamp ...

Calendar c=Calendar.getInstance(TimeZone.getTimeZone("GMT+05:00"));
String stm= "INSERT INTO hotspot(timestamp) VALUES(?)";
pst = con.prepareStatement(stm);
pst.setTimestamp(1,Timestamp.valueOf("2012-01-05 14:00:00"), c );
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我想数据库中的正确值应该是(关于我的本地时区是EET(+02))

2012-01-05 11:00:00 +02

但使用pgadmin我检查值,我得到

2012-01-05 14:00:00 +02

有什么建议?

postgresql syntax-error insert-update timestamp-with-timezone

5
推荐指数
1
解决办法
7517
查看次数

oracle 如何在内部存储带时区的时间戳

基于 Oracle 文档,它在内部以数字形式存储时间戳和时区的不同部分。我读了这篇文章http://www.orafaq.com/wiki/Timestamp ,它解释了时间戳内部格式的算法。所以我做了一个简单的测试来验证它。

 SQL> create table tz_test(id number, tz timestamp with time zone);

 Table created.

 SQL> insert into tz_test values(1, timestamp '1999-10-29 21:00:00 -7:00');

 1 row created.

 SQL> insert into tz_test values(2, timestamp '1999-10-29 21:00:00 US/Pacific');

 1 row created.

 SQL> select id, dump(tz, 10) from tz_test where tz=timestamp '1999-10-29 21:00:00 -7:00';

    ID     DUMP(TZ,10)
 --------------------------------------------------------------------------------

     1     Typ=181 Len=13: 119,199,10,30,5,1,1,0,0,0,0,13,60

     2     Typ=181 Len=13: 119,199,10,30,5,1,1,0,0,0,0,137,156
Run Code Online (Sandbox Code Playgroud)

orafaq 中的文章谈到了 oracle 如何存储时区偏移量,我的第一行测试证明了这一点。但是没有关于如何存储时区文字的内容。所以我很想知道它。我也想知道 oracle 在内部如何评估时间戳 '1999-10-29 21:00:00 -7:00' 和时间戳 '1999-10-29 21:00:00 US/Pacific' 是相同的。

oracle timestamp-with-timezone

5
推荐指数
1
解决办法
1878
查看次数

PostgreSQL 如何知道我当前是否在时区“CET”中使用 DST?

我在我的中找到了以下行postgresql.conf

timezone = 'CET'
Run Code Online (Sandbox Code Playgroud)

我也通过查询设置得到了这个:

postgres=# show timezone;
 TimeZone
----------
 CET
Run Code Online (Sandbox Code Playgroud)

无论如何,我们目前仍然有 DST 活动,下面的示例显示服务器知道这一点(+02 是 CEST):

postgres=# select now();
              now
-------------------------------
 2019-10-09 02:03:33.48477+02
Run Code Online (Sandbox Code Playgroud)

但也有 PostgreSQL 已知的时区,缩写为 DST CET,并且没有 DST。特别是,所有具有此缩写的时区都有偏移+01:

postgres=# select * from pg_timezone_names() where abbrev = 'CET';
      name      | abbrev | utc_offset | is_dst
----------------+--------+------------+--------
 Africa/Algiers | CET    | 01:00:00   | f
 Africa/Tunis   | CET    | 01:00:00   | f

postgres=# select * from pg_timezone_abbrevs where abbrev = 'CET';
 abbrev | utc_offset | is_dst
--------+------------+--------
 CET    | …
Run Code Online (Sandbox Code Playgroud)

postgresql timezone timestamp-with-timezone postgresql-9.6

5
推荐指数
0
解决办法
1987
查看次数