如何使用DateTime.TryParseExact解析带引号的C#时间戳字符串?
解决带引号日期字符串的DateTime.TryParseExact解析问题
嘿,这个问题我之前折腾过好一会儿!其实完全不用先费劲剥离引号,DateTime.TryParseExact可以直接匹配带引号的日期格式,关键是要写对格式字符串。
核心解决方案
你的输入字符串是var dtStr = "\"2018-04-09\"";,对应的格式字符串需要把引号也作为匹配的一部分。这里有两种清晰的写法:
- 常规字符串转义写法
在格式字符串里,用\"来表示一个实际的双引号,代码示例:
using System; using System.Globalization; class Program { static void Main() { var dtStr = "\"2018-04-09\""; if (DateTime.TryParseExact(dtStr, "\"yyyy-MM-dd\"", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result)) { Console.WriteLine($"解析成功:{result}"); } else { Console.WriteLine("解析失败"); } } }
- 逐字字符串写法(可读性更强)
用带@的逐字字符串,里面用两个双引号""表示一个实际的双引号,不用反复写转义符:
var format = @"""yyyy-MM-dd"""; // 逐字字符串中""代表一个实际的" if (DateTime.TryParseExact(dtStr, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result)) { // 处理解析后的DateTime对象 }
为什么这样可行?
TryParseExact的格式字符串允许包含字面量字符,只要把它们放在引号里就会被当作固定匹配的内容。C#的字符串转义规则决定了:
- 常规字符串中,
\"会被解析为一个双引号; - 逐字字符串中,
""会被解析为一个双引号。
这样格式字符串就能完整匹配你输入的"2018-04-09",不需要额外处理引号。
小提醒
别忘了引用System.Globalization命名空间,使用CultureInfo.InvariantCulture可以避免因系统区域设置不同导致的解析错误——毕竟你的日期格式是固定的yyyy-MM-dd,和区域无关。
内容的提问来源于stack exchange,提问作者Erik Kinding
相关产品推荐
相关产品推荐

