繁体   English   中英

新的DateTime在IE 11中引发异常,但在Chrome中不引发

[英]new DateTime throws exception in IE 11 but not Chrome

我在后面的代码中有以下几行:

DateTime dt = new DateTime(Convert.ToInt32(year), Convert.ToInt32(month),   Convert.ToInt32(day), 0, 0, 0, DateTimeKind.Utc);

其中year =“ 2013”​​ month =“ 11” day =“ 11”

当我在IE中调试它时,它抛出System.FormatException:输入字符串的格式不正确。 在Chrome中正常运行。

我在这里想念什么?

更新:

好吧,我机智了。 我创建了一个新的Web窗体项目,并将以下方法添加到了后面的代码中。 我在Page_Load事件中使用以下字符串“ 11/11/2013 00:00:00”来调用它,并在“ int month = Convert”行引发System.FormatException。 ToInt32(monthString.Trim());“ monthString的值为“ 11”。 这仅在IE11中发生,并且在Chrome和IE10中运行良好。

private DateTime getDateTimeFromTimeArgument(string argument)
        {
            string[] argumentArray = argument.Split(' ');
            string[] valuesArray = argumentArray[0].Split('/');

            string yearString = valuesArray[2];
            string monthString = valuesArray[1];
            string dayString = valuesArray[0];

            int month = Convert.ToInt32(monthString.Trim());
            int day = Convert.ToInt32(dayString.Trim());
            int year = Convert.ToInt32(yearString.Trim());

            DateTime dte = new DateTime(year, month, day);
            return dte;
        }

我遇到了类似的问题,我注意到的一件事是,当您尝试将日期字符串解析为字符数组时,IE11中似乎有一些(隐藏的)Unicode 8206字符,但Chrome却没有。 就我而言,我是从telerik RadDatePicker控件中获取日期客户端的,并将其传递到另一个页面。 希望这可以帮助。

我知道这已经两年了,但答案是IE(由于某种原因)那里有一堆隐藏的无效字符,因此您必须使用类似以下的方法来解析它们:

    valToUse = new string(val.Where(c => char.IsNumber(c) || c == '/').ToArray());

IE 11发送的日期字符串包含隐藏的字符8206,这会导致转换问题。 在此处输入图片说明

解决方法:

Convert.ToDateTime(new string(this.AssignedDate.Where(c => c != '\u200E').ToArray()));

真的不明白为什么微软为自己创建了一个地雷。

尝试通过以下方式重写代码:

Trace.WriteLine("Year + " + year);
var yearValue = Convert.ToInt32(year);
Trace.WriteLine("Month + " + month);
var monthValue = Convert.ToInt32(month);
Trace.WriteLine("Day + " + day);
var dayValue = Convert.ToInt32(day);
DateTime dt = new DateTime(yearValue, monthValue, dayValue, 0, 0, 0, DateTimeKind.Utc);

并查看输出窗口和异常

IE11在编码日期方面做得有些奇怪。

尝试使用

date.toJSON() 

在浏览器上

所以你的查询字符串看起来像

?dateArg=2013-12-14T20:37:03.121Z

在服务器上,您可以像这样使用日期

DateTime date = DateTime.Parse(dateArg); //will parse the json into a C# object

var day = date.Day; //get day

var year = date.Year; //get year

var month = date.Month;  //get month

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM