Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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# 日期时区调整_C#_Date - Fatal编程技术网

C# 日期时区调整

C# 日期时区调整,c#,date,C#,Date,我的数据库位于加利福尼亚州等地。 我的用户表包含用户的所有时区,例如-0700 UTC 每当我向居住在纽约等地的用户显示日期时,如何调整数据库服务器的时间?UTC/GMT-4小时您应该以UTC格式存储数据,并以本地时区格式显示数据 DateTime.ToUniversalTime() -> server; DateTime.ToLocalTime() -> client 您可以使用AddXXX方法组调整日期/时间,但它可能容易出错。NET在课堂上支持时区。直到.NET 3.5(VS

我的数据库位于加利福尼亚州等地。 我的用户表包含用户的所有时区,例如-0700 UTC


每当我向居住在纽约等地的用户显示日期时,如何调整数据库服务器的时间?UTC/GMT-4小时

您应该以UTC格式存储数据,并以本地时区格式显示数据

DateTime.ToUniversalTime() -> server;
DateTime.ToLocalTime() -> client
您可以使用AddXXX方法组调整日期/时间,但它可能容易出错。NET在课堂上支持时区。

直到.NET 3.5(VS 2008),.NET除了转换到UTC和从UTC转换之外,没有任何内置的时区支持


如果一年中(夏季和冬季)的时差始终正好为3小时,只需使用
yourDate.AddHours(3)
将其更改为单向,然后使用
yourDate.AddHours(-3)
将其更改为反向。请确保将此因素考虑到一个函数中,该函数解释了添加/减去这3个小时的原因。

您可以使用TimeZoneInfo.GetSystemTimeZones()的组合,然后使用TimeZoneInfo.BaseUtcOffset属性根据偏移差来偏移数据库中的时间


System.TimeZoneInfo上的信息你知道,这是个好问题。今年我完成了我的第一个DB应用程序,因为我的时间相关输入数据是一个Int64值,这就是我在DB中存储的数据。我的客户端应用程序检索该值并对该值执行DateTime.FromUTC()或FromFileTimeUTC(),然后执行.LocalTime()以在其本地时间中显示内容。我想知道这是否是好的/坏的/糟糕的,但到目前为止,它已经足够满足我的需要了。当然,这项工作最终是由我编写的数据访问层库完成的,而不是数据库本身

似乎已经足够好了,但我相信其他对这类事情有更多经验的人会指出这不是最好的方法


祝你好运

如果使用.Net,则可以使用
TimeZoneInfo
。既然你在这个问题上加了“c”,我想你会的

第一步是获取要转换为的时区的
TimeZoneInfo
。在你的例子中,纽约的时区。以下是一种方法:

//This will get EST time zone
TimeZoneInfo clientTimeZone
    = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

//This will get the local time zone, might be useful
// if your application is a fat client
TimeZoneInfo clientTimeZone = TimeZoneInfo.Local;
然后,从数据库中读取
DateTime
后,需要确保其
Kind
设置正确。假设数据库中的
DateTime
是UTC(顺便说一句,这通常是推荐的),您可以按如下方式准备转换:

DateTime aDateTime = dataBaseSource.ReadADateTime();
DateTime utcDateTime = DateTime.SpecifyKind(aDateTime, DateTimeKind.Utc);
最后,要转换到不同的时区,只需执行以下操作:

DateTime clientTime = TimeZoneInfo.ConvertTime(utcDateTime, clientTimeZone);
一些额外的评论:

  • 时区信息
    可以存储在静态字段中,如果您只对几个特定时区感兴趣
  • TimeZoneInfo
    存储有关夏令时的信息。所以,你不必担心这一点
  • 如果您的应用程序是web应用程序,那么找出您的客户机所在的时区可能会很困难。这里解释了一种方法:
我希望这有帮助。:)