繁体   English   中英

使用仅小时格式的DateTime.ParseExact不起作用

[英]DateTime.ParseExact using just hour format not working

在我的网络核心项目中,我必须将字符串解析为DateTime。 该格式是动态的,在编译时未知。 代码是:

var datetime = DateTime.ParseExact(data, format, CultureInfo.InvariantCulture, DateTimeStyles.None);

但我有问题时,格式只是个小时,即将到来的数字从0到23。根据这个文章来指定小时格式你有4个选项:H,HH,HHH,而是试图解析时“0”

使用h我得到:

System.FormatException:输入字符串的格式不正确。

使用hh我得到:

System.FormatException:字符串未被识别为有效的DateTime。

使用H我得到:

System.FormatException:输入字符串的格式不正确。

使用HH我得到:

System.FormatException:字符串未被识别为有效的DateTime。

这篇文章中指出

如果format是不包含日期或时间分隔符的自定义格式模式(例如“ yyyyMMddHHmm”),请对提供者参数和每个自定义格式说明符的最大格式使用不变的区域性。 例如,如果要在格式模式中指定小时,请指定较宽的形式“ HH”而不是较窄的形式“ H”。

但这是我一直在做的并且没有工作。 我无法猜测如何实现仅将一个小时解析为DateTime的字符串。 有任何想法吗??

编辑

执行以下任何行时都会引发异常:

DateTime.ParseExact("0", "HH", CultureInfo.InvariantCulture, DateTimeStyles.None);
DateTime.ParseExact("0", "H", CultureInfo.InvariantCulture, DateTimeStyles.None);

我无法使用TimeSpan.Parse,因为我有读取xlsx文件的通用解决方案。 如何读取文件存储在数据库中。 有时,DateTime全部放在一列中,格式为ddMMyyHHmmss而其他日期时间则在一列中,格式为ddMMyy ,小时在另一列中,其ddMMyy为0到23(分钟和秒应初始化为0)。 之后,日期和小时将合并以返回整个DateTime。

当仅提供单个字符作为格式时,它将被解释为标准格式说明符,而不是自定义格式说明符 %字符可用于强制将其视为自定义说明符。 此处的文档中对此进行了介绍。

因此,不传递"h"而是传递"%h" 代替"H" ,传递"%H"

其他答案(例如答案)在使用String.FormatToString进行格式化方面已经提到了这一点,但是它也适用于ParseExact

另外,如果您从某个已知的DateTime值(也许是DateTime.MinValue或其他名称)开始,然后使用AddHours来获得所需的结果,则可能会发现代码更清晰,性能更高。 (当然,您首先需要将字符串解析为整数。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM