c# 全局本地化跨应用程序的日期时间

c# globally localize date time across application

我有一个 .NET c#,需要获取显示给最终用户的每个日期时间字段的本地时间作为用户的本地时间。 有没有办法全局处理这个问题 w/o 必须修改显示日期时间的每个地方?

系统时间设置为 UTC,所有数据存储和返回为 UTC。

举个例子,如果系统中返回给应用程序的时间是 1600 小时 UTC,坐在东部时间的用户应该看到这个时间是 1200 小时,而坐在

我见过一些使用 js 的解决方案,但这不是我们的选择

感谢帮助

你需要跟踪用户的本地,在cookie或数据库中,你需要存储两个值来帮助你在i18n(国际化)中,然后,当你需要格式化一些东西时利用这两个类 of c#: TimeZoneInfo and 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)

有了这个,您不仅可以向用户显示正确的日期(尽管该国家/地区实行夏令时),而且可以本地格式显示。