gpt4 book ai didi

c# - 如果未指定年份,如何使 DateTime.TryParse() 失败?

转载 作者:太空狗 更新时间:2023-10-30 00:31:48 24 4
gpt4 key购买 nike

考虑以下代码来解析日期。 (请注意,我在 EN-gb 语言环境中):

const DateTimeStyles DATE_TIME_STYLES = DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AllowWhiteSpaces;
DateTime dt;

// Current culture for this example is "EN-gb".

if (DateTime.TryParse("31/12", CultureInfo.CurrentUICulture, DATE_TIME_STYLES, out dt))
Console.WriteLine("Parsed correctly"); // Do not want!
else
Console.WriteLine("Did not parse correctly.");

我故意省略了年份。但是,TryParse() 将毫无错误地解析它,并将替换当前年份。

我希望能够强制用户输入日期的所有组成部分(使用他们的本地格式),所以我希望上面的解析失败——或者能够检测到用户没有'输入年份。

我真的不想使用 DateTime.TryParseExact(),因为那样我就必须添加代码来为所有不同的受支持语言环境指定所有不同的有效格式,这很重要并且可能容易出错。不过,我怀疑这很可能是我唯一理智的选择。

有人有什么想法吗? (这里已经有人在工作中实现了一个“解决方案”,其中涉及不允许当年,这显然不是一个好的解决方案......)

最佳答案

您可以查询文化模式,过滤掉没有年份的模式,然后对剩余模式使用 TryParseExact

var allPatterns = culture.DateTimeFormat.GetAllDateTimePatterns();
var patternsWithYear = allPatterns.Where(s => s.Contains("y")).ToArray();
bool success = TryParseExact(input, patternsWithYear, culture, styles, out dateTime);

已知错误:这不考虑转义,您需要使用适当的解析替换 Contains("y") 调用以修复此问题。

或者,如果您接受更严格的格式限制,则可以只使用 LongDatePatternShortDatePattern

关于c# - 如果未指定年份,如何使 DateTime.TryParse() 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com