- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道转换是如何进行的。 MySQL 服务器 (5.6) 将 TIMESTAMP 视为区域调整(并在内部存储在 UTC 中/从 UTC 检索)。它还将 DATETIME 视为没有区域。
在 Java 方面,无论哪种情况,我都建议读入 java.sql.Timestamp
。是否存在从 MySQL 的 DATETIME 到 java.sql.Timestamp
的区域类型转换(通过 MySQL 连接器 5.1.37 时)(例如应用客户端系统区域)?
最后,我的服务器和客户端只有一个区域,因此我维护一个特定的 ZoneId(在应用程序代码中)以到达 ZonedDateTime
。但我想使用 ZonedDateTime
,来回访问存储为 DATETIME 的数据库。一个简单的转换示例将不胜感激!
最佳答案
让我们解决您的每个问题。第一:
Is there a zone-type conversion taking place (when going through MySQL-connector 5.1.37) from MySQL's DATETIME to
java.sql.Timestamp
(such as to apply the client system zone)?
首先,我假设您正在使用
getTimestamp(int)来自连接器的方法。我找不到向我展示启发性答案的官方来源;然而,有一个问题,其中
answer声明:
When you call getTimestamp(), MySQL JDBC driver converts the time from GMT into default timezone if the type is timestamp. It performs no such conversion for other types.然而,在 this该方法的版本,它使用底层
Calendar
转换
Timestamp
到
TimeZone
指定,如果基础数据库不存储时区信息。这可能是您第二个问题的解决方案,只要您知道存储值的时区(您知道)。但如果不是,似乎第一种方法没有发生转换,至少在它检索
DATETIME
时是这样。 .说到你的第二个问题:
But I would like to work with
ZonedDateTime
, going back and forth to the database stored as DATETIME.
这让我觉得只要您知道
您要从哪个时区转换,就有办法做到这一点。正如我们之前所说,您和您的客户只使用一个
ZoneId
, 这完全没问题。但是,提供此答案是为了与更多时区一起使用。多个
ZoneId
如果您要存储
ZoneId
则可以实现数据库中的连接;检索它以及
DATETIME
最后将这些值处理成
ZonedDateTime
.您可以存储
ZoneId
使用
the ID's 进入数据库的
ZoneId
类(如果你愿意的话)。
Timestamp t = resultSet.getTimestamp(timestampColumnId);
ZoneId zoneId = ZoneId.of(resultSet.getString(zoneColumnId), ZoneId.SHORT_IDS);
ZonedDateTime d = ZonedDateTime.ofInstant(t.toInstant(), zoneId);
或者,您可以只存储 DATETIME
作为TIMESTAMP
在数据库中为 ZZ Coder在他的上述回答中建议。但是,您可以只使用 ZoneId
你有这样的硬编码:
Timestamp t = resultSet.getTimestamp(timestampColumnId);
ZonedDateTime d = ZonedDateTime.ofInstant(t.toInstant(), zoneId);
编辑
看着 source code , 在使用 getTimestamp(int, Calendar)
获取或设置调用时或 setTimestamp(int, Timestamp, Calendar)
函数,Calendar
的时区用来。但是,在某些情况下使用 TIMESTAMP
, 当 Calendar
未使用时,JDBC 然后使用服务器的时区。根据原始海报,它有效(请参阅下面的 comment)。
关于java - MySQL DATETIME 和 TIMESTAMP 到 java.sql.Timestamp 到 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063851/
标题基本上说明了一切。 我主要对更新案例感兴趣。假设我们正在尝试更新具有时间戳记字段的记录,并且我们希望将该字段设置为记录更新的时间戳记。有没有办法做到这一点? 最佳答案 经过一些实验,我找到了合适的
我正在学习一门类(class),其中我必须将日期转换为 unix 时间戳。 import pandas as pd df = pd.read_csv('file.csv') print type(df
我在两个不同的数据库中运行了相同的语句:我的本地数据库和 Oracle Live SQL . CREATE TABLE test( timestamp TIMESTAMP DEFAULT SY
我在两个不同的数据库中运行了相同的语句:我的本地数据库和 Oracle Live SQL . CREATE TABLE test( timestamp TIMESTAMP DEFAULT SY
bson.timestamp.Timestamp需要两个参数:time 和 inc。 time 显然是存储在 Timestamp 中的时间值。 什么是公司?它被描述为递增计数器,但它有什么用途呢?它应
2016-08-18 04:52:14 是我从数据库中获取的时间戳,用于跟踪我想从哪里加载更多记录,这些记录小于该时间 这是代码 foreach($explode as $stat){
我想将 erlang:timestamp() 的结果转换为正常的日期类型,公历类型。 普通日期类型表示“日-月-年,时:分:秒”。 ExampleTime = erlang:timeStamp(),
我想将 erlang:timestamp() 的结果转换为正常的日期类型,公历类型。 普通日期类型表示“日-月-年,时:分:秒”。 ExampleTime = erlang:timeStamp(),
我是 Java 新手。我正在使用两个 Timestamp 对象 dateFrom和dateTo 。我想检查是否dateFrom比 dateTo早 45 天。我用这个代码片段来比较这个 if(dateF
在将 panda 对象转换为时间戳时,我遇到了这个奇怪的问题。 Train['date'] 值类似于 01/05/2014,我正在尝试将其转换为 linuxtimestamp。 我的代码: Train
我正在努力让我的代码运行。时间戳似乎有问题。您对我如何更改代码有什么建议吗?我看到之前有人问过这个问题,但没能成功。 这是我在运行代码时遇到的错误:'Timestamp' object has no
我正在尝试运行以下查询: SELECT startDate FROM tests WHERE startDate BETWEEN TIMESTAMP '1555248497'
我正在使用 Athena 查询以 bigInt 格式存储的日期。我想将其转换为友好的时间戳。 我试过了: from_unixtime(timestamp DIV 1000) AS readab
最近进行了一些数据库更改,并且 hibernate 映射出现了一些困惑。 hibernate 映射: ...other fields 成员模型对象: public class Mem
rng = pd.date_range('2016-02-07', periods=7, freq='D') print(rng[0].day) print(rng[0].month) 7 2 我想要
rng = pd.date_range('2016-02-07', periods=7, freq='D') print(rng[0].day) print(rng[0].month) 7 2 我想要
我必须在我的数据库中保存 ServerValue.TIMESTAMP 但它必须是一个字符串。当我键入 String.valueOf(ServerValue.TIMESTAMP); 或 ServerVa
在我的程序中,每个表都有一列 last_modified: last_modified int8 DEFAULT (date_part('epoch'::text, now()::timestamp)
我想将此时间戳对象转换为日期时间此对象是在数据帧上使用 asfreq 后获得的这是最后一个索引 Timestamp('2018-12-01 00:00:00', freq='MS') 想要的输出 2
我有一个包含时间序列传感器数据的大表。大型是指分布在被监控的各个 channel 中的从几千到 10M 的记录。对于某种传感器类型,我需要计算当前读数和上一个读数之间的时间间隔,即找到当前读数之前的最
我是一名优秀的程序员,十分优秀!