DateTime.ParseExact忽略第一个字符C#

4

我从设备中获取了一个类似于 "1140421164500" 的 string 值。我必须将它转换为 DateTime 类型。我想使用 DateTime.ParseExact 函数来进行转换。我知道可以通过手动省略第一个字符来进行转换,如下所示:

DateTime.ParseExact("140421164500", "yyMMddHHmmss", CultureInfo.InvariantCulture);

但是我希望避免手动省略第一个字符。我想在ParseExact函数中使用通配符字符来忽略它,例如:

DateTime.ParseExact("1140421164500", "*yyMMddHHmmss", CultureInfo.InvariantCulture);

请注意,第一个字符可以是1表示夏令时处于活动状态,或者是0表示不活动。设备也可以像"0140101000000"这样向我发送信息。

对于这个函数,是否有类似的内容?


2
为什么在调用ParseExact之前不能使用字符串操作函数删除字符呢? - jle
2
为什么不使用普通的字符串操作?例如,对输入进行子字符串处理? - MatthewMartin
你考虑过编写自己的格式提供程序来识别 * 吗? - ClickRick
@jle,我不需要它,因为我有一个库可以处理这些字符串的计算/转换,并且我只能提供字符串值的格式字符串。由于我的库存在这种限制,我无法操作该字符串(它被内部捕获)。现在我看到除了修改我的库之外没有其他解决方案。 - Fer
1个回答

9

自定义日期和时间格式 中没有通配符可以解析字符串中的每个可能字符。

您可以在字符串的第一个字符中添加您的格式,例如:

string s = "1140421164500";
Console.WriteLine(DateTime.ParseExact(s, s[0] + "yyMMddHHmmss", 
                  CultureInfo.InvariantCulture));

输出将是:

4/21/2014 4:45:00 PM

这里有一个demonstration


1
@DStanley:+1,但这取决于您如何定义字符串操作。连接字符串(s[0] +“yyMMddHHmmss”)就是字符串操作! - Matt Burland
1
@DStanley,就源字符串操作而言,s[0]s.Substring(1)有何不同? - Ulugbek Umirov
@MattBurland 抱歉,打错字了 :) - Ulugbek Umirov
1
@UlugbekUmirov 没有区别。不要更改源字符串。 - D Stanley
1
@elgonzo OP说:请注意,第一个字符可以是1,表示夏令时处于活动状态,或者是0,表示夏令时处于非活动状态 就像我所说的; 没有通配符可以解析每个可能的字符 - Soner Gönül
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接