【发布时间】:2018-05-16 20:41:18
【问题描述】:
在我的 net core 项目中,我必须将字符串解析为 DateTime。格式是动态的,在编译时是未知的。代码是:
var datetime = DateTime.ParseExact(data, format, CultureInfo.InvariantCulture, DateTimeStyles.None);
但是当格式只是小时并且是从 0 到 23 的数字时,我遇到了问题。根据this 文章指定小时格式,您有 4 个选项:h , hh, H 和 HH,但是在尝试解析“0”时
使用 h 我得到:
System.FormatException : 输入字符串的格式不正确。
使用 hh 我得到:
System.FormatException:字符串未被识别为有效的 DateTime。
使用 H 我得到:
System.FormatException : 输入字符串的格式不正确。
使用 HH 我得到:
System.FormatException:字符串未被识别为有效的 DateTime。
在this 文章中指出
如果 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 ,而其他 DateTime 在一列中,格式为 ddMMyy ,而小时在其他列中,为 0 到 23 之间的数字(分钟和秒应初始化为 0 )。稍后将日期和小时合并以返回整个 DateTime。
【问题讨论】:
-
如果您只有时间,日期会是什么时候,会是 1.1.0001 吗?
-
在这种情况下,白天部分将被忽略,所以它是一样的。
-
可能你已经检查过了,但无论如何:stackoverflow.com/questions/34321486/…
-
另外,您是否可以选择检查您拥有的值并填充它,以便它适合正确的格式,例如如果 string.Length == 1 或 2...string = string + ":00".
-
不幸的是,
DateTime.ParseExact不处理 all 格式组合,并且不处理仅包含 1 个数字(表示小时)的字符串。最可能的原因是“没有人”会要求DateTime.ParseExact解析不是日期、时间或组合的东西,而"23"两者都不是。
标签: c# .net datetime .net-core