And*_*son 8 c# datetime string-parsing
我希望能够解析的串时间,其中运行小时从0到23(小时,分,秒),并且其中用于一个位数小时前述零是任选的.
我希望能够解析为有效对象的时间字符串示例DateTime:
我试图使用C#方法DateTime.ParseExact来管理解析,但我不能在它的生命周期中提出一个格式字符串,可以处理"没有前置零的单位数小时"场景.
我应该如何指定DateTime.ParseExact格式字符串以使用相同的代码行充分解析上面的所有示例?
受自定义日期和时间格式的MSDN页面的启发,我尝试了以下方法:
DateTime.ParseExact(time_string, "Hmmss", CultureInfo.InvariantCulture);
DateTime.ParseExact(time_string, "%Hmmss", CultureInfo.InvariantCulture);
DateTime.ParseExact(time_string, "HHmmss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
所有这些格式字符串都适用于上面的前两个示例情况,但面对一位数小时而没有前面的零,所有公式都会抛出一个FormatException.
您可以在小时、分钟和秒之间插入分隔符,如下所示:
string timeString = "94505";
string formatedTimeString = Regex.Replace(str, @"\d{1,2}(?=(\d{2})+$)", "$&:");
var datetime = DateTime.ParseExact(formatedTimeString, "H:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
更新:
我在解析格式字符串时找到了失败的原因:"94505""Hmmss"
发生的情况是 H、m 和 s 实际上会在可能的情况下抓取两位数,即使格式的其余部分没有足够的位数。因此,例如格式为 Hmm 和数字 123 的情况下,H 将抓取 12 并且只剩下 3 个。而 mm 需要两位数,所以失败了。
所以基本上你有两个选项来处理“没有前面零的个位数小时”场景:
更改时间格式:将小时放在最后(例如,"ssmmH"或"mmssH")或使用分隔符(例如,"H:mm:ss")
像我之前建议的那样或像keyboardP那样修改字符串。
如果您知道始终有六个字符,则可以填充输入字符串。
string input = "94505";
if(input.Length < 6)
input = input.PadLeft(6, '0');
Run Code Online (Sandbox Code Playgroud)
(或者input.Length == 5如果您有其他更短的有效格式,请使用)。
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |