如何处理将日期转换为特定用户时区(Generic)MVC

时间:2017-04-23 18:18:14

标签: c# asp.net asp.net-mvc

我已经做了很多关于处理和转换我的应用程序中的日期的研究,以便在时区之间全球工作。

在我的应用程序中,用户可以选择不同的UiCulture来显示Web应用程序并从文化中选择不同的时区,例如他/她可以将文化设置为en-US并在数据库内的时间区域中设置时区。 我已经成功地实现了一种通用的方式来转换用户输入并以UTC格式存储它并使用所选的UiCulture恢复和格式化。

我知道我可以使用控制器内部的功能(或其他一些地方),顺便说一句,我正在使用MVC,我不喜欢复制过去的代码或重复它。

现在,我想要的是一种通用的方法来处理基于用户预定义时区的日期时间部分的转换(不希望在许多地方复制过去的代码)。

将日期转换为UTC已通过模型绑定器完成。

public class DateTimeModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (string.IsNullOrWhiteSpace(value.AttemptedValue))
        {
            return null;
        }

        DateTime dateTime;
        string CleanedDate = Numbers.ArabicToEnglish(value.AttemptedValue);

        var isDate = DateTime.TryParse(CleanedDate, Thread.CurrentThread.CurrentUICulture, DateTimeStyles.None, out dateTime);
        if (!isDate)
        {
            bindingContext.ModelState.AddModelError(bindingContext.ModelName, "Invalid Nullable DateTime Value");
            return null;
        }
        return dateTime;
    }
}

我不知道是否可以使用“ DefaultModelBinder ”实现插入和恢复的时区处理。使用方法

protected override void SetProperty
protected virtual object GetPropertyValue

我不想要客户端解决方案。

抱歉我的英语不好,因为它不是我的第一语言,我不知道你是否得到我的问题,因为我真的不知道如何形容它。

我做了很多阅读和搜索,找不到我想要的类似行为。

提前谢谢。

0 个答案:

没有答案