如何正确做DateTime.Parse

How to do DateTime.Parse correctly

我有以下方法:

    private DateTime GetDateTimeFromString(string dateTimeStr)
    {
        try
        {
            return DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture);
        }
        catch (Exception ex)
        {
            _logger.Log($"Exception while parsing {dateTimeStr}: {ex.Message}.");

            return DateTime.Now;
        }
    }

当我在 Visual Studio 中 运行 它工作正常。但是当它部署到 Azure 时它失败了。错误是:

Exception while parsing 21/4/2019 11:6:56: String was not recognized as a valid DateTime.

我将 21/4/2019 11:6:56 粘贴到调试器中,它可以工作。胡说八道。有人可以帮忙吗?

请注意,无论有没有 CultureInfo,它在 Azure(作为 Web 应用程序)上都会失败。

同样在 Azure 上,我的 web.config 设置为:

<globalization culture="" uiCulture="" />

您可以尝试使用DateTime.TryParseExact并设置解析格式。

DateTime dt;

DateTime.TryParseExact("21/4/2019 11:6:56",
                       "dd/M/yyyy hh:m:ss",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None,
                        out dt);

我使用 DateTime.TryParseExact 而不是 DateTime.Parse

有两个原因
  1. DateTime.TryParseExactreturnbool,你可以处理它而不是处理Exception。如果输入字符串与格式和区域性不匹配。它将 return false.
  2. 确定参数Culture和日期时间格式。

像这样。

DateTime dt;

if(!DateTime.TryParseExact(dateTimeStr,
                       "dd/M/yyyy hh:m:ss",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None,
                        out dt))
{
    _logger.Log($"Exception while parsing {dateTimeStr}");
    dt = DateTime.Now;
}

return dt;

c# online

    string dateTimeStr = "2019-04-35";
    DateTime dateTime;
    if (DateTime.TryParse(dateTimeStr, out dateTime))
    {
        Console.WriteLine(dateTime);
    }
    else
    {
        Console.WriteLine("Invalid");
    }