【发布时间】:2011-05-10 12:48:59
【问题描述】:
我正在创建一个 asp.net 2.0 网站。它显示所有已注册的候选人和注册日期。我将数据库中的所有日期存储为 UniversalDate,现在想根据客户文化和时区显示日期。
我可以使用 javascript 获取时区偏移量,但如何正确显示时区缩写,因为有些偏移量是相同的。
所以请告诉我该怎么做?
【问题讨论】:
标签: .net asp.net internationalization timezone culture
我正在创建一个 asp.net 2.0 网站。它显示所有已注册的候选人和注册日期。我将数据库中的所有日期存储为 UniversalDate,现在想根据客户文化和时区显示日期。
我可以使用 javascript 获取时区偏移量,但如何正确显示时区缩写,因为有些偏移量是相同的。
所以请告诉我该怎么做?
【问题讨论】:
标签: .net asp.net internationalization timezone culture
我不确定我是否理解正确:
您的问题是,您使用 JavaScript 函数 getTimeZoneOffset() 从 Web 浏览器获取时区偏移量,将其发送到服务器并在显示时遇到问题:使用哪个时区?
基本上,如果是用户默认的时区指示符,则不需要添加。默认情况下,我的意思是本地。在这种情况下,您只需要关心正确的偏移量。当然,这可能是历史数据的问题:如果有多个时区共享(当前)相同的偏移量,但偏移量在不同日期发生变化,您可能会为少数记录打印错误的日期和时间。
如何避免?唯一的方法是将时区信息添加到用户的个人资料中,并让用户能够从列表中选择她的时区。您可以从TimeZoneInfo 轻松获取列表(这是您需要用来执行计算的类;某些条目将被有意/出于历史原因重复):
// gives you the list of time zones
var timeZones = TimeZoneInfo.GetSystemTimeZones();
foreach(var timeZone in timeZones)
{
// gives you the UTC offset and list of cities this entry regards to
// this is the best what you can display to user
string name = timeZone.DisplayName;
// ...
}
如果您想使用此方法,您可能需要添加信息“根据...时区的所有日期和时间。在此处更改您的时区。”。就是这样。
我唯一的问题是,DisplayName 属性应该给我本地化名称,但它总是向我显示当前服务器文化中的名称:/
【讨论】: