0

我将日期作为以下格式的字符串:

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

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

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

防爆输出: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"));
        }
    },
4

1 回答 1

2

尝试这个:

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

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

 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 方法。

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

于 2013-07-01T11:42:20.183 回答