gpt4 book ai didi

c# - 如何更改与 MySQLConnector/Net 中的连接关联的时区?

转载 作者:行者123 更新时间:2023-11-29 22:31:15 33 4
gpt4 key购买 nike

我正在尝试将时间从 UTC 格式的 Unix 时间戳插入到 MySQL 表中。使用from_unixtime(timestamp)可以进行解析,但它使用的时区是“当前时区”,这显然是连接的当前时区,而不是mysql服务器本身。

有什么方法可以更改连接的时区吗?我尝试在插入之前添加 SET time_zone="+00:00"; ,但这并没有改变任何内容。我在 connection string options 中没有看到任何内容,或者。

我意识到我可以做类似 CONVERT_TZ(FROM_UNIXTIME(timestamp), @@session.time_zone, '+00:00') 的事情,但我宁愿避免所有毫无意义的转换,如果我可以,尤其是from_unixtime docs警告转换可能不是无损的。

如果有什么区别的话,我正在使用 MySQLConnector/Net 6.9.6。

最佳答案

原来问题是我自己造成的。 DateTimeOffset.Date 返回一个没有偏移量的 DateTime。哎呀。

如果有人遇到类似的奇怪问题,这里有一些在尝试弄清楚连接器的用途时非常有帮助的事情:

Enabling MySQL tracing

在连接对象内部查看它认为的时区是什么:

object driver = conn.GetType().GetField("driver", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(conn);
object tzOffset = driver.GetType().GetField("timeZoneOffset", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(driver);

使用 SQL 检查区域偏移:

TimeSpan? timediff = new MySqlCommand("SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP())", conn).ExecuteScalar() as TimeSpan?;
DateTime? nullable = new MySqlCommand("SELECT NOW()", conn).ExecuteScalar() as DateTime?;

关于c# - 如何更改与 MySQLConnector/Net 中的连接关联的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29761453/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com