【问题标题】:Microsoft Edge - C# Error - String was not recognized as a valid DateTimeMicrosoft Edge - C# 错误 - 字符串未被识别为有效的日期时间
【发布时间】:2018-06-05 15:11:05
【问题描述】:

您好,我的 MVC 控制器 Get 方法中的日期时间格式面临的问题。 从 Firefox、Chrome、Internet Explorer 发送请求时,它工作正常, 但它在请求来自 Microsoft Edge 浏览器时抛出异常 :(

异常:字符串未被识别为有效的日期时间。

示例代码在这里 -

public JsonResult GetFYDetailsForDate(string date)
{
    //input date = "6/13/2018"
    DateTimeStyles dateTimeStyles = DateTimeStyles.AssumeLocal;
    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");

    var culturedDate1 = DateTime.ParseExact(date, "M/d/yyyy", new System.Globalization.CultureInfo("en-US"));

    var culturedDate = DateTime.Parse(date, culture, dateTimeStyles);

}

如果请求来自 Chrome、Firefox 和 Internet Explorer,则输入日期为“6/13/2018”,解析日期输出为“6/13/2018 12:00:00 AM”。

** 为了解决这个问题,我们可以从日期字符串中提取日期、月份和年份,但我不想这样做。只想知道有什么问题 请求来自 Microsoft Edge 浏览器。

代码截图 -

【问题讨论】:

  • 您确定来自 Edge 的输入是预期的吗?不像6 13 2018
  • 当你在这个代码点使用断点进行调试时,日期字符串值是多少?
  • @Nekeniehl,是的,代码中注释的输入“6/13/2018”是从来自 Edge 的请求中复制的。
  • 尝试做DateTime.ParseExact(date, "M/d/yyyy", CultureInfo.InvariantCulture);我不在电脑前,不能自己做
  • 寻找任何可能与有效负载一起出现的额外字符。例如,当您的断点被命中时,在立即窗口中,将date.Length 与您认为应该是的比较(在"6/20/2018" 的示例中,我希望它是9)。如果它更大,您可能需要在解析之前对字符串使用date.Trim() 或其他一些清理。

标签: c# asp.net asp.net-mvc datetime microsoft-edge


【解决方案1】:

来自 Microsoft Edge 浏览器的输入日期字符串存在问题。日期字符串包含字符 (Char)8206 这就是 C# 无法解析日期并引发错误的原因。字符串的可见长度是 9,但字符串的实际长度是 14。所以我已经从字符串中删除了那些隐藏的字符,现在它工作得很好。

下面的代码 sn-p 我用来清理字符串,请建议任何更好更有效的方法。

谢谢。

string sanitizedDateString = new String(inputDate.ToCharArray().Where(x => x != (Char)8206).ToArray());

【讨论】:

  • 8206(十六进制 200E)是一个 left-to-right mark 字符。您可以将其替换为 inputDate.Replace("\u200E","") 而不是上述所有内容。但是,我建议您首先了解为什么要从浏览器端获取此信息。可能存在一些文化/当地问题。
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 2012-01-07
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多