【问题标题】:How to convert HttpCookie DateTime?如何转换 HttpCookie 日期时间?
【发布时间】:2015-06-05 07:18:55
【问题描述】:

我有以下代码,我正在尝试检查DateTime

HttpCookie date1 = Request.Cookies.Get("Date1");

DateTime? aDate = date1 != null DateTime.ParseExact(date1.Value, "dd/MM/yyyy", null): (DateTime?) null;

我也尝试了Convert.ToDateTime(date1),但它们都不起作用。我得到以下异常String was not recognized as a valid DateTime error

【问题讨论】:

  • 你能给我们一个Date1的例子吗?
  • stackoverflow.com/questions/2922762/… 可能是相关的。可以按照自己的方式将其转换为字符串或其他内容,并将其转换为您想要的日期对象。
  • 产生该异常时Date1 的值是多少。如果它与“dd/MM/yyyy”格式不匹配,您可能会遇到错误。
  • 当我调试时,我看到这种格式的值03%2F31%2F2014

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


【解决方案1】:

来自您的 cmets:

当我调试时,我看到这种格式的值 03%2F31%2F2014

那就试试吧:

DateTime.ParseExact(WebUtility.UrlDecode(date1.Value), "MM/dd/yyyy", null)

注意null 表示使用当前 文化进行解析。如果该格式的值是always,那么您可能希望改用CultureInfo.InvariantCulture

或者,如果您确实根据当前文化改变了值,那么您应该尝试以下操作:

DateTime.Parse(WebUtility.UrlDecode(date1.Value))

我不确定为什么您的值是 URL 编码的。或许您还应该调查一下您是如何设置 cookie 的。您应该可能使用具有不变文化的 ISO8601 格式 (yyyy-MM-dd) 进行设置。

【讨论】:

    【解决方案2】:

    你必须Decode 你的价值观。然后您会看到它是03/31/2014,这与您提供的格式不同。使用:

    DateTime.ParseExact(System.Net.WebUtility.UrlDecode(date1.Value),
                    "MM/dd/yyyy",
                    CultureInfo.InvariantCulture);
    

    确保传递CultureInfo.InvariantCulture 而不是null,这可能会在默认文化具有与/ 不同的数据分隔符的机器上导致问题

    WebUtility.UrlDecode Method 仅随 .Net 框架 4.5 提供。如果您的目标是 .Net 框架 4.0 或更低版本,请使用 HttpUtility.UrlDecode

    【讨论】:

    • 现在我收到了这个错误The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.
    • @Lakhae - 那不是传入的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2010-11-03
    • 2014-02-19
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多