解析为 DateTime 格式 (M)M/(d)d/yy (h)h:mm tt.



我认为这很容易: 我想将以下字符串格式解析为DateTime

"18-4-25 下午3:11">

这比我预期的要困难得多。

DateTime.Parse只返回一个异常Input string not in the correct format

DateTime.TryParseExact是我最接近的,它可以解析这个确切的字符串,但它没有考虑日、月、小时(等(何时超过(或低于,取决于掩码(9,因为掩码必须完全匹配否则它将失败。

string input = "4/25/18 3:11 PM";
string input2 = "1/1/18 10:10 AM";
DateTime theDate;
DateTime.TryParseExact(input, "M/dd/yy h:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out theDate);

我的下一个想法是拆分出42518,如果它们<10,则添加一个 0,并在 18 之前连接一个 20,但这似乎有点矫枉过正。它还留给我时间和根据tt是上午还是下午来制定条件。

编辑:基于一些评论....

我无法控制输入字符串。

Convert.ToDateTime("25/4/18 3:11 PM")引发异常{"String was not recognized as a valid DateTime."}

当我将输入日期指定为 4/25/18 时,输入格式显然是 M/dd/yy。不幸的是,这可能意味着输入日期可以是 MM/d/yy 等。我们可以假设它将永远是月/日/年。

TLDR:如何将inputinput2清晰地解析为日期时间?

谢谢

您可以将代码更改为这样,然后它应该接受两位数和两位数的两种格式:

DateTime.TryParseExact(
input, "M/d/yy h:mm tt",CultureInfo.InvariantCulture, DateTimeStyles.None,
out var theDate);

格式字符串中的单字符Mdh组件允许个位数或两位数。

小提琴

如果代码在美国区域设置中执行,并且日期字符串已知或应为有效的美国日期格式:

Convert.ToDateTime("4/25/18 3:11 PM")

对于其他区域设置(假设输入字符串在当前区域性中有效(,请尝试以下重载:

Convert.ToDateTime("25/4/18 3:11 PM", System.Globalization.CultureInfo.CurrentCulture)

但是,如果我理解正确,根据您的修订和评论,您希望日期将始终采用 M/D/Y(US(格式:

我无法控制输入字符串。

Convert.ToDateTime("25/4/18 3:11 PM")引发异常{"String was not recognized as a valid DateTime."}

当我将输入日期指定为 4/25/18 时,输入格式显然是 M/dd/yy。不幸的是,这可能意味着输入日期可以是 MM/d/yy 等。我们可以假设它将始终是月/日/年。

确定。在这种情况下,您正在尝试针对无效的美国日期执行美国区域性。但是,如果您可以假设字符串中提供的日期格式始终是月/日/年,那么您应该能够执行以下操作:

Convert.ToDateTime("4/25/18 3:11 PM", new System.Globalization.CultureInfo("en-US"))

无论月/日以个位数还是两位数提供,这似乎都有效,并且应该根据假定的 en-US 日期字符串返回有效的DateTime对象。

最新更新