将UTC日期时间转换为MVC4中的DateTimeoffset

时间:2013-07-01 11:27:36

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

我的日期为字符串,格式如下:

string s = "Thu Aug 22 00:00:00 UTC+0530 2013";

我必须将其转换为DatetimeOffset,我使用了ParseExactParse方法。但是,我似乎无法正确理解。我收到String was not in correct format例外。

我必须将上述值作为datetimeoff对象存储在数据库中。

Ex输出:2013-08-22 00:00:00 +05:30.

从jQuery渲染的日期:

$.widget("df.datetime", $.df.datetimecontrols, {
    _createInput: function () {
        var min = this.element.attr("data-minRelDate"),
            max = this.element.attr("data-maxRelDate");
        debugger;
        this._Input = $("<input>")
            .addClass("datetime")
            .attr("disabled", this._getDisableProp() ? "disabled" : "")
            .prop("disabled", this._getDisableProp() ? true : false)
            .addClass(this._getDisableProp() ? "disabled" : "")
            .datetimepicker({
                numberOfMonths: 2,
                minDate: min,
                maxDate: max,
                //Uncomment below line for date format.
                //dateFormat: $.datepicker.RFC_1123,
                timeText: "Current time:",
                hourGrid: 2,
                minuteGrid: 5,
                timeFormat: "hh:mm TT",
                onSelect: $.proxy(this._change, this),
                beforeShow: $.proxy(this._focusHndlr, this, 4),
                onClose: $.proxy(this._focusHndlr, this, -4)
                //TimeZone is not supported Across the browsers.To do manually there will change in the 
                //  years(save light day etc.,) https://github.com/timrwood/moment/issues/162
            })
            .focus($.proxy(this._inputFocus, this))
            .blur($.proxy(this._inputBlur, this))
            .appendTo(this._Wrapper);

        //Base element value to be widgets value.
        if ($(this.element).val() != "") {
            // If we wont specify time on recreate then time sliders will stay unchanged.
            //  we manipulate datepicker value and value of input to display differently.
            //  LLLL--> Thursday, April 18 2013 1:20 PM
            //  L --> 04/18/2013
            //  LT --> 8:30 PM
           this._Input.datepicker("setDate", new    Date(moment($(this.element).val()).format("LLLL")));
           this._Input.val(moment($(this.element).val()).format("L LT"));
        }
    },

1 个答案:

答案 0 :(得分:2)

试试这个:

DateTimeOffset.ParseExact("Thu Aug 22 00:00:00 UTC+0530 2013",
                          "ddd MMM dd HH:mm:ss \"UTC\"zzz yyyy",
                          CultureInfo.InvariantCulture);

编辑: 处理格式的基本方法。您可以使用正则表达式,或者如果您可以提前确定格式,则可以使用“type”之类的标记。

 public DateTimeOffset universalParser(string inputDate, int type)
    {
        switch (type)
        {
            case 1:
                return DateTimeOffset.Parse(inputDate,
                                            CultureInfo.InvariantCulture);

            case 2:
                return DateTimeOffset.ParseExact(inputDate,
                                  "ddd MMM dd HH:mm:ss \"UTC\"zzz yyyy",
                                   CultureInfo.InvariantCulture);                         
        }
        //if there is another type
        return DateTimeOffset.Parse(inputDate);
    }

或者您可以使用自己的签名覆盖DateTimeOffset.ParseExact方法。

最好为每种格式创建自己的类类型,这些类型可以使用通用解析方法的不同实现来实现相同的接口。并且您的代码可以在运行时决定应该使用哪个实现(依赖注入)。