【发布时间】:2015-12-28 21:42:52
【问题描述】:
假设我们有一个由 angularjs 前端和 asp.net wep api 作为后端的应用程序。
客户在使用日期选择器时应该使用他的文化(例如:En-US)。当数据将发布到后端时,我在那里有一种特定的文化(例如:Tr-TR)。
我想要一个处理日期时间格式的系统来轻松管理这种情况。例如,每当客户端向后端发送请求时,我应该从请求中了解他的文化,然后在返回数据之前在序列化时将我的日期转换为该格式。
我应该创建什么类型的系统?
由于我还没有前端代码,所以我将在 web api 端分享我的文化配置。
设置文化
public class CultureConfig
{
public static void Register()
{
//Get the culture info of the language code
const string uiLanguage = "Tr";//"En-US";
var culture = CultureInfo.CreateSpecificCulture(uiLanguage);
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
}
Json 序列化配置:
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings = new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Unspecified,
Culture = CultureInfo.DefaultThreadCurrentCulture
};
【问题讨论】:
-
您能否提供一个指向您正在使用的特定日期选择器组件的指针?如果不了解您可能已实施的更多细节并且仅依赖假设,则很难提供帮助。
-
嗨,@DarinDimitrov 其实我只是在假设。我还没有开始写前端。我只是在 web api 端创建我的基础设施。然后我想到了这个问题。我认为无论日期选择器是什么。假设有来自不同文化的客户的数据,我必须在后端处理它们。
-
在这种情况下,只需确保前端始终以 UTC 格式发送日期。这就是您绝对希望它们存储在后端的方式。不幸的是,由于您没有提供有关您正在使用的特定组件的任何具体细节,也没有提供序列化协议,所以这个问题几乎没有任何意义,可能应该关闭。
-
我添加了关于文化的代码。我希望它有助于澄清一些事情
-
我再次重复我的建议 - 使用 UTC 和 ISO8601 格式进行序列化。
标签: c# angularjs datetime asp.net-web-api culture