我有一个.NET c#,需要将显示给最终用户的每个日期时间字段的本地时间作为用户的本地时间。 有没有办法处理这个全局,而不必修改显示日期时间的每个地方?
系统时间设置为UTC,所有数据都存储并以UTC格式返回。
一个例子是,如果系统中返回应用程序的时间是UTC时间为1600小时,那么坐在东部时间的用户应将此时间视为1200小时,并且用户坐在
中我已经看到一些使用js的解决方案,但这不是我们的选择
感谢您的帮助
答案 0 :(得分:2)
你需要跟踪用户的本地,在cookie或数据库中,你需要存储两个值来帮助你进入i18n(国际化),然后,当你需要格式化的东西时使用这两个类别的c#:TimeZoneInfo和CultureInfo,第一个需要国家时区,第二个需要时区(你可以看到TimeZoneInfo.GetSystemTimeZones()
的所有时区,然后你使用这个类格式化你的文本。
一个例子:
var timeZoneInfo = string.IsNullOrEmpty(Settings.CountryTimezone) ?
TimeZoneInfo.Local :
TimeZoneInfo.FindSystemTimeZoneById(Settings.CountryTimezone);
var cultureInfo = string.IsNullOrEmpty(Settings.CountryCulture) ?
CultureInfo.CurrentCulture :
CultureInfo.GetCultureInfo(Settings.CountryCulture);
然后你使用这样的对象:
var dateTime = TimeZoneInfo.ConvertTimeFromUtc(client.ActivatedOn.Value.UtcDateTime, timeZoneInfo);
在视图中(例如):
@dateTime.ToString("G", cultureInfo)
通过这种方式,您不仅会向用户显示正确的日期(尽管该国家/地区采用了夏令时),而且还会以本地格式显示。