2016-10-03 81 views
0

我有一个.NET C#,并且需要获取显示给最终用户的每个日期时间字段的本地时间,作为用户的本地时间。 有没有办法来处理这个全球w/o不得不修改每个地方日期时间显示?c#全局本地化跨应用程序的日期时间

系统时间设置为UTC,并且所有数据都存储并作为UTC返回。

一个例子是,如果在返回给应用程序的系统的时间1600hrs UTC,坐在东部时间用户应该看到这次作为1200hrs和用户坐在

我看到了一些解决方案,使用JS,但这不是我们

感谢您的帮助

+0

非常不清楚你在问什么......给我“系统时间设置为UTC”意味着UTC *是当地时间* - 你正在寻找什么其他当地时间?另外“IIS”有点奇怪的标签 - 可能你的意思是“这是定制的非ASP.Net框架中的Web服务器代码” - 你可能想要发布并澄清。 –

回答

1

你需要跟踪的选项,用户的地方,在cookie或数据库,则需要两个值存储帮助你在i18n(国际化),然后,当你需要格式化的东西使用这两类c#:TimeZoneInfoCultureInfo,第一个需要国家时区,第二个需要时区(您可以在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) 

有了这个,你会不仅向用户显示正确的日期(尽管在该国的夏令时),而是以本地格式显示。