C# 日期时区调整
我的数据库位于加利福尼亚州等地。 我的用户表包含用户的所有时区,例如-0700 UTCC# 日期时区调整,c#,date,C#,Date,我的数据库位于加利福尼亚州等地。 我的用户表包含用户的所有时区,例如-0700 UTC 每当我向居住在纽约等地的用户显示日期时,如何调整数据库服务器的时间?UTC/GMT-4小时您应该以UTC格式存储数据,并以本地时区格式显示数据 DateTime.ToUniversalTime() -> server; DateTime.ToLocalTime() -> client 您可以使用AddXXX方法组调整日期/时间,但它可能容易出错。NET在课堂上支持时区。直到.NET 3.5(VS
每当我向居住在纽约等地的用户显示日期时,如何调整数据库服务器的时间?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应用程序,那么找出您的客户机所在的时区可能会很困难。这里解释了一种方法: