【问题标题】:DateTime.TryParse not parsing simple date string C#DateTime.TryParse 不解析简单的日期字符串 C#
【发布时间】:2017-09-14 19:29:15
【问题描述】:

我在 Javascript 中设置了一个 cookie,其值为当前日期。我正在尝试在我的代码中检查此值,但 DateTime.TryParse("09/14/2017") 不起作用。这是我的完整代码:

var cookie = Request.Cookies["DateCookie"];

if (cookie == null || String.IsNullOrEmpty(cookie.Value)) return false;

DateTime expiration;
if (DateTime.TryParse(cookie.Value, out expiration))
{
    if (expiration > DateTime.UtcNow) return true;
}

cookie.Value = "09/17/2017"; 这是由以下 Javascript 设置的:

var d= new Date();
d= d.toLocaleDateString();
document.cookie = "DateCookie=" + d;

编辑:我将行更改为

var date = cookie.Value

if (DateTime.TryParseExact(date, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None, out expiration))
{ ...
}

这仍然返回错误

编辑 2:当我看到 DateTime.TryParse 不起作用时,我的意思是当我期望它返回有效日期时它返回 false

编辑 3:我添加了这个测试代码,两种情况都返回 false。为什么会这样?

var testdate = "09/14/2017";
DateTime x;
var outcome = DateTime.TryParse(testdate, out x);
var outcome2 = DateTime.TryParseExact(date, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None,
    out x);

【问题讨论】:

  • 为我工作。为什么说它不起作用?你的默认文化是什么?
  • 我说它不起作用,因为我单步执行我的代码并且它没有返回值
  • 不返回值是什么意思?如果你有一个非 void 函数,它必须返回一个值
  • 为了开发者的未来,请永远不要内联你的 if 语句
  • 通常是这样的。

标签: javascript c# datetime cookies


【解决方案1】:

设置 cookie 的 Javascript 返回一个没有前导 0 的日期字符串(“9/14/2017”)

var d= new Date();
d= d.toLocaleDateString();

因此,带有“MM/dd/yyyy”的 TryParseExacty 没有解析它。通过在月份 时添加前导零来修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多