Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL时区支持_C#_Mysql_Date_Datetime_Timezone - Fatal编程技术网

C# MySQL时区支持

C# MySQL时区支持,c#,mysql,date,datetime,timezone,C#,Mysql,Date,Datetime,Timezone,我在运行于Windows 2008 Server的MySQL服务器5.6上添加了时区支持。我已经将默认时区设置为GMT,这很好。此外,我还按照上的说明获取时区描述表 时区信息现在存储在mysql数据库下 我的另一个数据库使用带有外键的Innodb引擎,需要日期和时间的任何字段都以时间戳格式存储。在我的一个名为Company的表中,我需要输入他们的时区 我有两个问题 我应该为某个公司或该公司所属的城市/州/地区指定时区吗 理想的情况下,我想把他们的时区和一个外国的时区联系起来。但是如果时区ID等

我在运行于Windows 2008 Server的MySQL服务器5.6上添加了时区支持。我已经将默认时区设置为GMT,这很好。此外,我还按照上的说明获取时区描述表

时区信息现在存储在mysql数据库下

我的另一个数据库使用带有外键的Innodb引擎,需要日期和时间的任何字段都以时间戳格式存储。在我的一个名为Company的表中,我需要输入他们的时区

我有两个问题

  • 我应该为某个公司或该公司所属的城市/州/地区指定时区吗

  • 理想的情况下,我想把他们的时区和一个外国的时区联系起来。但是如果时区ID等在mysql数据库中,这怎么可能呢?我不希望普通的mysql用户能够访问mysql数据库


处理此类问题的最佳做法是什么。

我认为您不应该试图通过DB管理时区

如果您将PHP与MySQL结合使用,则可以轻松地转换时区。 对于日期或任何事情:不要使用时区!利用和利用时间戳:

你一定要看

我应该为单个公司或该公司所属的城市/州/地区指定时区吗

这是非常依赖于应用程序的,但一般来说,您应该考虑将时区分配给公司的特定位置。一个有多个办公室的公司可能在不同的时区拥有这些办公室。但是您应该仔细考虑这对于您的特定用例意味着什么

尝试将时区指定给区域通常不是一个好主意,因为存在太多的边缘情况。有许多国家和州有多个时区,也有一些城市有多个时区(尽管不太常见)

通常,将时区分配给单个用户或特定事件。这取决于您的应用程序需要什么

理想的情况下,我想把他们的时区和一个外国的时区联系起来。但是如果时区ID等在mysql数据库中,这怎么可能呢?我不希望普通的mysql用户能够访问mysql数据库

MySQL使用。(另请参见和。)

由于.Net不使用此数据,如果要将内容与数据库对齐,则需要使用库,例如或。(我强烈推荐野田时间。)

当然,只有当您实际需要处理数据库中的时区时,才需要这样做。通常,您不会有这样的要求

处理这类问题的最佳做法是什么

这里有一个完整的最佳实践列表。然而,您应该做什么在很大程度上取决于您的实际需求。没有一个一刀切的答案

通常,最好的方法是将UTC值存储在数据库中,并在特定时区之间进行转换以显示。在这种情况下,数据库中根本不需要时区数据,您可以选择使用IANA时区,或者使用.Net的
TimeZoneInfo
类附带的Windows时区


您可能需要在数据库中提供时区支持的一个例子是,如果您有一些要求,例如“我想要一个按天分组的报告,其中一天是在特定时区的本地定义的。哦,我希望该报告的每个查看者都有自己的本地数据视图,该视图根据他们对“天”的理解进行调整。”

您可以使用:Int32 unixtimestap=(Int32)(DateTime.Now.Subtract(newdatetime(1970,1,1))).TotalSeconds;如果您正在查找当前时刻的unix时间戳,那么实际上会给出错误的值。您需要改用
DateTime.UtcNow