C# - 如何格式化datetime以删除尾随零

时间:2013-06-27 17:22:18

标签: c# .net string datetime

我正在设置一个业务流程类,它将多个操作作为一个大事务处理。对于这些事务中的每一个,我给它们在业务流程的开头实例化了相同的时间戳。

我使用以下行:

 var transactionTimestamp =  DateTime.UtcNow.ToString("o");

我在系统中有一个约束,规定时间戳不能有任何尾随零。

例如:

2013-06-26T19:51:38.0083980Z //bad
2013-06-26T19:51:38.008398Z  //good
2013-06-26T19:51:38.0083988Z //good

3 个答案:

答案 0 :(得分:6)

内置的DateTime格式“o”与自定义格式相当:“yyyy' - 'MM' - 'dd'T'HH':'mm':'ss'。'fffffffK”。如果您只是使用该格式,但将小写字母f替换为大写字母,则不会有尾随零。

DateTime.UtcNow.ToString( “YYYY ' - ' MM ' - ' dd'T'HH ':' 毫米 ':'。'SS FFFFFFFK”);

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

答案 1 :(得分:3)

使用Regex可以相当轻松地实现这一目标。这是一种方式。

string result = Regex.Replace("2013-06-26T19:51:38.0083980Z", "0+Z$", "Z");
// result == "2013-06-26T19:51:38.008398Z"

string result2 = Regex.Replace("2013-06-26T19:51:38.0083988Z", "0+Z$", "Z")
// result2 == "2013-06-26T19:51:38.0083988Z"

答案 2 :(得分:1)

我会写自己的帮助方法,如;

public string GetDtString(DateTime dt)
{
    RegEx rgx = new RegEx("[1-9]0+Z\b");
    return rgx.Replace(dt.ToString("o"), System.String.Empty);
}

它基本上只返回带有全0的dt字符串,它出现在数字1-9之后和Z\b之前(Z后跟一个字边界),带有一个空字符串。