因此,我更新为MySql.Data 8.0.13
,并注意到我的TIMESTAMP
字段为DateTimeKind.Local
,而DATETIME
字段为DateTimeKind.Unspecified
我认为“时间戳”将是表示“ CreatedTime”字段的一种很好的语义类型,所以我同意了。
问题是,我通常将这些日期“手动”写在插入查询中,它们是由应用程序(在UTC中)生成的,以确保本地时间及其疯狂的时区/夏时制不会破坏任何内容。我不对它们使用更新或插入。现在,我的应用程序的JSON序列化程序遇到了问题,再次将已经是UTC的时间转换为UTC,这会导致错误的偏移时间。
所以我的问题:
是否有一种方法可以强制执行MySQL.Data以“将那些日期/时间戳视为UTC”?还是最好停止使用TIMESTAMP
并坚持使用DATETIME
呢?
还是我应该像这样拉一个疯狂的头?
if(databaseValue is DateTime dt) {
databaseValue = new DateTime(dt.Ticks, DateTimeKind.UTC);
}
哪种方法更适合解决此问题?
答案 0 :(得分:1)
有一个备用库MySqlConnector,它具有一个DateTimeKind
选项,您可以在connection string中指定该选项:
MySqlDataReader返回DateTime时使用的DateTimeKind。如果设置 到Utc或Local,如果使用DateTime命令,则将抛出MySqlException 参数分别具有本地类型或Utc类型。