- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 DateTime.TryParseExact
方法,但遇到了一个我不明白的情况。我有一些格式和一些主题要解析,每个都应该完美匹配其中一种格式:
var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};
var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};
然后我尝试解析它们并打印出结果:
foreach(var subject in subjects)
{
DateTime result;
DateTime.TryParseExact(subject, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out result);
Console.WriteLine("{0,-6} : {1}",
subject,
result.ToString("T", CultureInfo.InvariantCulture));
}
我得到以下信息:
1 : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56
关于我的问题……为什么它在 123 和 12345 上失败了?那些不应该变成 01:23:00 和 01:23:45 吗?我在这里错过了什么?我怎样才能让它像我期望的那样工作?
更新: 所以,看来我们可能已经弄清楚为什么会失败。似乎 H
实际上是获取两位数字,然后只为 mm
保留一位数字,这样就会失败。但是,有没有人知道如何更改此代码以获得我正在寻找的结果?
另一个更新: 认为我现在找到了一个合理的解决方案。添加它作为答案。将在 2 天内接受它,除非其他人想出更好的。感谢您的帮助!
最佳答案
好的,所以我想我现在已经弄清楚了这一切,这要归功于更多的阅读、实验和这里其他有用的答案。发生的事情是 H、m 和 s 实际上会尽可能地获取两位数字,即使没有足够的数字用于其余部分的格式。因此,例如对于格式 Hmm 和数字 123,H 将获取 12 并且只会有一个3 还剩。而 mm 需要两位数,所以它失败了。 Tadaa。
因此,我目前的解决方案是仅使用以下三种格式:
var formats = new[]
{
"%H",
"Hm",
"Hms",
};
在我的问题的其余代码保持不变的情况下,我将得到以下结果:
1 : 01:00:00
12 : 12:00:00
123 : 12:03:00
1234 : 12:34:00
12345 : 12:34:05
123456 : 12:34:56
我认为这应该既合理又可以接受:)
关于c# - .NET:为什么 TryParseExact 在 Hmm 和 Hmmss 上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573659/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Parse DateTime with timezone of form PST/CEST/UTC/etc
我在 linqpad 中使用以下代码(删除 native C# 的 .Dump()): string dateTime = "3/20/2015 1:45:00 PM"; string dateF
我对 tryparseexact 方法的工作原理有疑问。 因为我需要将 excel 数据上传到 sql server 的任务。我需要从 excel 转换 sql 中的日期时间列。但我在 EXCEL 中
这个问题在这里已经有了答案: DateTime conversion from string C# (3 个答案) 关闭 5 年前。 我有一个没有字段分隔符的时间和日期值,我试图使用 TryPars
是否可以指示 DateTime.TryParseExact 接受多个( 任何 )分隔符( 指定分隔符占位符而不是特定分隔符 )?例如: DateTime.TryParseExact(performan
如何使用 DateTime.TryParseExact 进行防护(并尽可能获取解析值)?以下代码不起作用。 [] let main args = let argList = args |> L
使用下面的 DateTime.TryPaseExact 方法会在预期的时候给出不同的输出。 我从下面的代码中返回了以下格式: 2014-02-10 18:32:37 1402-10-18 17:23:
知道为什么当我的字符串中有时间 "00:00:00" 时这不起作用吗? DateTime.TryParseExact("01/06/2015 00:00:00", "dd/MM/yyyy", Cult
下面的代码工作正常,只是想知道是否有更优雅的方式来实现同样的事情?下面的日期应该是有效的,除此之外的任何其他日期都不应该: 1/12/2017 1/12/2017 11:10 1/12/2017 11
为什么这不起作用? DateTime.TryParseExact(text, "H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteS
我讨厌问愚蠢的问题,但我已经浏览了 MSDN 文章几次并尝试了一个小时,但无论我尝试什么,我都无法让这种格式工作。这是我要解析的内容: Thu, Jun 22 与 bool parsed = Date
我正在尝试解析一个巨大的文件,其中包含一些 DateTime 行。出于某种原因,DateTime.TryParseExact 仅在某些行而不是其他行上返回 true。 我的 DateParse.txt
为什么会 DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)
下面的代码片段显示“07/01/2011”而不是“07/09/2011”。这段代码有什么问题吗? 代码片段: DateTime result; DateTime.TryParseExact( "
我正在对要解析为 DateTime 的字符串调用 TryParse。简单的东西。当格式符合我的预期时,这一切都有效。但是当日期的每个组成部分/部分组成部分是单个数字时,解析失败。 例子: var da
我无法完成这项工作 - 它总是返回 False。 我在这里错过了什么? DateTimeOffset parsedDate; if ( DateTimeOffset.TryParseExact("20
我在使用 DateTime.ParseExact(..) 将 DateTime 值的字符串表示形式解析回 DateTime 实例时遇到问题方法。 出于某种原因,使用具有不同值的类似格式化字符串(或者我
我有一个包含日期时间值的 json 字符串和如下所示的解析机制: if (DateTime.TryParseExact(TheUserTimeString, "M.d.yyyy.HH.mm", Cul
您好,我有以下方法,我将值“2014 年 1 月 7 日 13:48:46”传递给它,据我所知,TryParseExact 应该匹配格式“dd MMM yyyy hh:mm:ss”和返回 true,但
谁能解释为什么下面的代码片段返回 true? 根据 The "d" custom format specifier 的文档, "个位数的日期格式不带前导零。"那么,当我给它一个带前导零的个位数日时,为
我是一名优秀的程序员,十分优秀!