【问题标题】:DateTime.ParseExact ignore first char C#DateTime.ParseExact 忽略第一个字符 C#
【发布时间】:2014-06-05 14:35:10
【问题描述】:

我从像“1140421164500”这样的设备获得了string 值。我必须将其转换为DateTime 类型。我想使用DateTime.ParseExact 函数。我知道我可以通过手动省略第一个字符来转换它,如下所示:

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

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

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

请注意,第一个字符可以是 1 表示夏令时是主动的,或者 0 表示被动。该设备还可以向我发送“0140101000000”之类的信息。

这个功能有类似的东西吗?

【问题讨论】:

  • 为什么不能在调用 ParseExact 之前使用字符串操作函数删除字符?
  • 为什么不只是普通的字符串操作?即取输入的子字符串?
  • 如何编写自己的格式提供程序来识别*
  • @jle 我不想要它,因为我有一个库正在对这些字符串进行计算/转换,我只能提供字符串值的格式字符串。由于我的库的这种限制,我无法操作字符串(它在内部被 cautgh)。现在我发现除了修改我的库之外没有其他解决方案。

标签: c# parsing datetime dst


【解决方案1】:

custom date and time format 中没有通配符可以解析字符串中的每个 可能的字符。

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

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

输出将是;

4/21/2014 4:45:00 PM

这里是 demonstration

【讨论】:

  • @DStanley:+1,但这取决于您对字符串操作的定义。连接字符串 (s[0] + "yyMMddHHmmss") 是字符串操作!
  • @DStanley s[0]s.Substring(1) 在源字符串操作方面有何不同?
  • @MattBurland 对不起,错字:)
  • @UlugbekUmirov 没有区别。既不改变源字符串。
  • @elgonzo OP 说:请注意,第一个字符可以是 1 表示夏令时是活动的,或者 0 表示被动 就像我说的那样; 没有通配符可以解析所有可能的字符
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多